Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Frage eines absoluten Neulings...

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von chris69, 20 Januar 2013.

  1. chris69

    chris69 Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru


    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
     
  3. chris69

    chris69 Benutzer

    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
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden