phpbar.de logo

Mailinglisten-Archive

Datumsbereiche

Datumsbereiche

Bobby Eichholz bob at mental-defact.de
Die Jul 15 16:48:14 CEST 2003


Also irgendwie bekomme ich das nicht hin :( Ist es die Temperatur oder
bin ich einfach zu blöd? Hat vielleicht noch einer 'ne Idee?

Ich habe folgende Tabellen mit Inhalten:

CREATE TABLE tab1 (
  ID int(10) unsigned NOT NULL auto_increment,
  Besch varchar(255) NOT NULL default '',
  PRIMARY KEY  (ID)
) TYPE=MyISAM;

INSERT INTO tab1 VALUES (1, 'Mercedes');
INSERT INTO tab1 VALUES (2, 'Chrysler');

CREATE TABLE tab2 (
  ID int(10) unsigned NOT NULL default '0',
  Datum date NOT NULL default '0000-00-00',
  Anz tinyint(3) default NULL,
  UNIQUE KEY ID (ID,Datum)
) TYPE=MyISAM;

INSERT INTO tab2 VALUES (1, '2003-08-01', 5);
INSERT INTO tab2 VALUES (1, '2003-08-02', 5);
INSERT INTO tab2 VALUES (1, '2003-08-03', 5);
INSERT INTO tab2 VALUES (1, '2003-08-04', 4);
INSERT INTO tab2 VALUES (1, '2003-08-06', 5);
INSERT INTO tab2 VALUES (1, '2003-08-05', 5);
INSERT INTO tab2 VALUES (1, '2003-08-07', 9);
INSERT INTO tab2 VALUES (1, '2003-08-08', 9);
INSERT INTO tab2 VALUES (1, '2003-08-09', 5);
INSERT INTO tab2 VALUES (2, '2003-08-03', 88);
INSERT INTO tab2 VALUES (2, '2003-08-04', 88);

Daruf mache ich folgende Abfrage:

SELECT 
	a.ID, 
	a.Besch, 
	b.Anz, 
	MIN(b.Datum), 
	MAX(c.Datum)
FROM 
	Tab1 AS a 
INNER JOIN 
	Tab2 AS b USING(ID) 
INNER JOIN 
	Tab2 AS c USING(ID,Anz)
LEFT JOIN 
	Tab2 AS d USING(ID,Anz)
WHERE (d.Datum BETWEEN b.Datum AND c.Datum)
GROUP BY 
	a.ID, 
	b.Anz
ORDER BY 
	a.ID,
	b.Anz ASC

Und bekomme dieses Ergebnis:

ID  Besch  Anz  	MIN(b.Datum)  MAX(c.Datum)  
1 Mercedes 4 	2003-08-04 	2003-08-04 
1 Mercedes 5 	2003-08-01 	2003-08-09 
1 Mercedes 9 	2003-08-07 	2003-08-08 
2 Chrysler 88 	2003-08-03 	2003-08-04 

Das Problem liegt in Zeile 2, diese sollte eigentlich aufgesplittet
sein:

ID  Besch  Anz  	MIN(b.Datum)  MAX(c.Datum) 
1 Mercedes 5 	2003-08-01 	2003-08-03  
1 Mercedes 5 	2003-08-05 	2003-08-06 

Wenn ich in die WHERE-Klausel 'AND d.Anz IS NULL' einfüge, bekomme ich
gar kein Ergebnis mehr und bei 'AND d.Anz IS NOT NULL' sieht es aus wie
vorher.

Mit freundlichen Grüßen
Bobby Eichholz


-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive