User since
2004-06-17
305
Artikel
BenutzerIn
... vom Prinzip ja. Nur wenn ein Mitarbeiter, wie hier 'Meier' ( ID 1 ) öffters in einer Abteilung tätig war, wie hier im Verkauf vom 1.1. bis 28.2. und dann wieder ab 1.7. spuckt er mir ja zwei Datensätze aus.
So wie ich es sehe werde ich um Unterabfragen und/oder temporäre Tabellen und/oder SELECT in SELECT nicht rumkommen
User since
2003-08-04
14371
Artikel
ModeratorIn
MartinR+2007-12-13 21:25:19--... vom Prinzip ja. Nur wenn ein Mitarbeiter, wie hier 'Meier' ( ID 1 ) öffters in einer Abteilung tätig war, wie hier im Verkauf vom 1.1. bis 28.2. und dann wieder ab 1.7. spuckt er mir ja zwei Datensätze aus.
Nö, hast Du's überhaupt getestet? Da steht nämlich ein "DISTINCT"...
User since
2003-08-04
14371
Artikel
ModeratorIn
Das hier habe ich eben gerade mal mit Deinen auf Seite 1 geposteten Daten getestet: [sql] SELECT DISTINCT Personal.p_id, name
FROM Personal, Abteilungen, Zuordnung
WHERE Personal.p_id = Zuordnung.p_id AND
Abteilungen.a_id = Zuordnung.a_id AND
datum <= '2007-04-01' AND
abteilung = 'Verkauf' ORDER BY Personal.p_id, datum DESC[/sql]
User since
2004-06-17
305
Artikel
BenutzerIn
renee+2007-12-14 09:05:16--
Nö, hast Du's überhaupt getestet? Da steht nämlich ein "DISTINCT"...
Asche auf mein Haupt. Das habe ich tatsächlich überlesen - und deswegen auch nicht getestet ...
... werde es aber nachholen
User since
2004-06-17
305
Artikel
BenutzerIn
So, nun hab ich es ausprobiert (MySQL 5.0.32 und eine 4er Version). Das Ergebnis ist
1;Meier
2;Mueller
4;Schmid
Stimmt aber leider nicht, da Meier(1) am 1.4. in der Werbung (2) tätig war ( z_id 2 ) und Mueller(2) eigentlich im Lager(3) gewesen ist ( z_id 5 ). Nur der Schmid stimmt - ist aber wohl eher Zufall ...
User since
2003-08-04
14371
Artikel
ModeratorIn
Stell mal Deine Daten als SQL-Dump zur Verfügung...
User since
2004-06-17
305
Artikel
BenutzerIn
So hab's ich grad ausprobiert ...
CREATE TABLE `x_personal` (
`p_id` tinyint(4) NOT NULL auto_increment,
`name` varchar(50) NOT NULL default '',
PRIMARY KEY (`p_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
INSERT INTO `x_personal` VALUES (1, 'Meier');
INSERT INTO `x_personal` VALUES (2, 'Mueller');
INSERT INTO `x_personal` VALUES (3, 'Huber');
INSERT INTO `x_personal` VALUES (4, 'Schmid');
INSERT INTO `x_personal` VALUES (5, 'Meister');
CREATE TABLE `x_zuordnung` (
`z_id` tinyint(4) NOT NULL auto_increment,
`p_id` tinyint(4) NOT NULL default '0',
`a_id` tinyint(4) NOT NULL default '0',
`datum` date NOT NULL default '0000-00-00',
PRIMARY KEY (`z_id`),
KEY `a_id` (`p_id`,`a_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;
INSERT INTO `x_zuordnung` VALUES (1, 1, 1, '2007-01-01');
INSERT INTO `x_zuordnung` VALUES (2, 1, 2, '2007-03-01');
INSERT INTO `x_zuordnung` VALUES (3, 1, 5, '2007-06-01');
INSERT INTO `x_zuordnung` VALUES (4, 1, 1, '2007-07-01');
INSERT INTO `x_zuordnung` VALUES (5, 2, 3, '2007-01-01');
INSERT INTO `x_zuordnung` VALUES (6, 3, 2, '2007-01-01');
INSERT INTO `x_zuordnung` VALUES (7, 3, 4, '2007-04-01');
INSERT INTO `x_zuordnung` VALUES (8, 4, 3, '2007-02-01');
INSERT INTO `x_zuordnung` VALUES (9, 4, 1, '2007-03-01');
INSERT INTO `x_zuordnung` VALUES (10, 5, 4, '2007-01-01');
INSERT INTO `x_zuordnung` VALUES (11, 2, 1, '2007-03-01');
INSERT INTO `x_zuordnung` VALUES (12, 2, 3, '2007-05-01');
CREATE TABLE `x_abteilung` (
`a_id` tinyint(4) NOT NULL auto_increment,
`abteilung` varchar(50) NOT NULL default '',
PRIMARY KEY (`a_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
INSERT INTO `x_abteilung` VALUES (1, 'Verkauf');
INSERT INTO `x_abteilung` VALUES (2, 'Werbung');
INSERT INTO `x_abteilung` VALUES (3, 'Lager');
INSERT INTO `x_abteilung` VALUES (4, 'Leitung');
INSERT INTO `x_abteilung` VALUES (5, 'Buchhaltung');
SELECT DISTINCT
P.p_id,
P.name
FROM
x_personal AS P,
x_abteilung AS A,
x_zuordnung AS Z
WHERE
P.p_id = Z.p_id AND
A.a_id = Z.a_id AND
Z.datum <= '2007-04-10' AND
Z.a_id = 1
ORDER BY
P.p_id,
Z.datum DESC