Frage eines absoluten Neulings...

chris69

Benutzer
Beiträge
13
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
 
Werbung:
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
 
Werbung:
Hi Andreas,

danke an die Antwort! Hilft mir sicher etwas und weiter "lernen".

Es war nur ein Beispiel, meine "Wochen" ist eine Liste von Zahlen und meine "Tage" ist eine andere Liste, hab das wegen der guten Anschauung ausgesucht.

Chris
 
Zurück
Oben