Hallo,
bin total neu auf diesem Thema und brauch etwas Anschub. Hab etwas herumprobiert, find aber keinerlei Ansatz zu meinem Problem.
Ich hab in der 1. Spalte die Woche, als Zahl, in der 2. Spalte den Wochentag ebenfalls als Zahl, in der 3. Spalte einen Wert.
Wo ich brauche ist eine Abfrage wie:" wenn in ein und derselben Woche der Tag 4 einen kleineren Wert wie 10 hat dann gib mir den Tag 6 aus"
danke an alle helfenden Antworten
Chris
Du hast schon mal ein schlechtes Tabellendesign. Auch MySQL hat für Datumsangaben passende Typen, nutze diese und nicht eine Spalte für Woche und eine für Tag.
Angenommen, Du hast diese Daten:
(Achtung: ich arbeite mit PostgreSQL, das wird so in MySQL möglicherweise nicht 1:1 funktionieren!)
Code:
test=*# select * from werte;
d | value
------------+-------
2013-01-20 | 4
2013-01-21 | 6
2013-01-22 | 5
2013-01-23 | 2
2013-01-24 | 8
2013-01-25 | 9
(6 rows)
Die KW und den Tag kann man so ermitteln:
Code:
test=*# select extract(week from d) as kw, extract (dow from d) as tag, value from werte;
kw | tag | value
----+-----+-------
3 | 0 | 4
4 | 1 | 6
4 | 2 | 5
4 | 3 | 2
4 | 4 | 8
4 | 5 | 9
(6 rows)
Deine Aufgabe, leicht modifiziert: wenn an Wochentag 2 der Wert kleiner 6 ist, nimm Wert von Wochentag 4.
Code:
test=*# select werte.d, extract(week from d) as kw, extract (dow from d) as tag, case when extract (dow from d) = 2 then case when value >= 6 then value else (select value from werte w2 where d = werte.d+2) end else value end from werte;
d | kw | tag | value
------------+----+-----+-------
2013-01-20 | 3 | 0 | 4
2013-01-21 | 4 | 1 | 6
2013-01-22 | 4 | 2 | 8
2013-01-23 | 4 | 3 | 2
2013-01-24 | 4 | 4 | 8
2013-01-25 | 4 | 5 | 9
(6 rows)
Auf alle Fälle solltest Du immer und generell passende Datentypen nehmen. Ein Datum in 2,3 oder mehr Spalten zu zertrümmern (ich hab schon Jahr, Monat, Tag, Stunde, Minute, Sekunde in je extra Spalten gesehen...) wird Dir eher früher als später schmerzhaft auf die Füße fallen.
PS.: es sollte relativ trivial sein, diese Abfrage auf Deine Tabelle und den Mitteln von MySQL umzuschreiben ...
Andreas