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

startprobleme

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von luzie, 18 März 2013.

  1. luzie

    luzie Neuer Benutzer

    Hallo,

    bin absolut neu bei diesem Thema und hab eine Art "Grundsatzproblem"

    ich habe eine Datenban:

    eine Spalte "Woche", die Wochen sind durchnummeriert
    eine Spalte "Tage", ebenfalls durchnummeriert (Montag = 1 usw.)
    daneben eine Spalte "Umsatz"
    weitere Spalte mit weiteren Werten

    ich versuche abzufragen: wenn innerhalb ein und derselben Woche, ein Dienstag einen Umsatz von kleiner als xy hat, zeige mir den Datensatz von Donnerstag an

    diese Abfrage soll nacheinander mit allen Wochen geschehen

    Ich hoffe das jemand helfen kann
    PS. meine Kenntnisse reichen nur bis zum "select * from ..., weiss deshalb rein gar nicht wie ich innerhalb der ein und derselben Wochen selektieren kann

    danke an Hilfe

    Luzie
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Du meinst sicherlich Tabelle. versuche, diese Begriffe klar zu trennen.

    Nächstes jahr fängst dann an, eine Spalte für das Jahr dranzukleben. Nein, so wird das nix, Du hast ein falschen Design. Es gibt Datentypen, nutze diese.

    Ich hab 2 Nachrichten für Dich, eine gute und eine schlechte. Zuerst die schlechte: mein Beispiel ist mit PostgreSQL. Die gute: damit geht es:

    Code:
    test=*# select * from umsatz ;
        tag     | umsatz          
    ------------+--------         
     2013-03-01 |  45.53          
     2013-03-02 |  26.21          
     2013-03-03 |  63.88          
     2013-03-04 |  45.42          
     2013-03-05 |  87.57          
     2013-03-06 |  36.68          
     2013-03-07 |  43.27          
     2013-03-08 |  20.78          
     2013-03-09 |  72.30          
     2013-03-10 |  51.91          
     2013-03-11 |   7.36          
     2013-03-12 |  23.65          
     2013-03-13 |   3.88          
     2013-03-14 |  10.16          
     2013-03-15 |  45.47          
     2013-03-16 |  86.53          
     2013-03-17 |   9.50          
     2013-03-18 |  92.68          
     2013-03-19 |  31.04          
     2013-03-20 |  59.33          
     2013-03-21 |  60.79          
     2013-03-22 |  74.78          
     2013-03-23 |  58.60          
     2013-03-24 |  59.92          
     2013-03-25 |  80.05          
     2013-03-26 |  97.13          
     2013-03-27 |  25.27          
     2013-03-28 |  71.92          
     2013-03-29 |   5.48          
     2013-03-30 |  58.05          
     2013-03-31 |  21.36          
    (31 rows)                     
    
    Time: 0,227 ms
    test=*# select tag, umsatz, case when extract (dow from tag) = 2 and umsatz < 50 then (select x.umsatz from umsatz x where tag = umsatz.tag+2) else umsatz end from umsatz ;
        tag     | umsatz | umsatz
    ------------+--------+--------
     2013-03-01 |  45.53 |  45.53
     2013-03-02 |  26.21 |  26.21
     2013-03-03 |  63.88 |  63.88
     2013-03-04 |  45.42 |  45.42
     2013-03-05 |  87.57 |  87.57
     2013-03-06 |  36.68 |  36.68
     2013-03-07 |  43.27 |  43.27
     2013-03-08 |  20.78 |  20.78
     2013-03-09 |  72.30 |  72.30
     2013-03-10 |  51.91 |  51.91
     2013-03-11 |   7.36 |   7.36
     2013-03-12 |  23.65 |  10.16
     2013-03-13 |   3.88 |   3.88
     2013-03-14 |  10.16 |  10.16
     2013-03-15 |  45.47 |  45.47
     2013-03-16 |  86.53 |  86.53
     2013-03-17 |   9.50 |   9.50
     2013-03-18 |  92.68 |  92.68
     2013-03-19 |  31.04 |  60.79
     2013-03-20 |  59.33 |  59.33
     2013-03-21 |  60.79 |  60.79
     2013-03-22 |  74.78 |  74.78
     2013-03-23 |  58.60 |  58.60
     2013-03-24 |  59.92 |  59.92
     2013-03-25 |  80.05 |  80.05
     2013-03-26 |  97.13 |  97.13
     2013-03-27 |  25.27 |  25.27
     2013-03-28 |  71.92 |  71.92
     2013-03-29 |   5.48 |   5.48
     2013-03-30 |  58.05 |  58.05
     2013-03-31 |  21.36 |  21.36
    (31 rows)
    
    Time: 0,509 ms
    test=*#
    
    Am 12. und 19., das sind Dienstage, ist der Umsatz kleiner als 50. Daher wird der vom Donnerstag angezeigt.

    Da das mit PostgreSQL gemacht ist, wirst das vermutlich anpassen müssen. Oder gleich PG nehmen ;-)


    Andreas
     
  3. luzie

    luzie Neuer Benutzer

    Hallo,

    grosses Danke, auch an deine Hinweise

    komm leider damit nicht weiter!

    Lu
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Stell die Tabelle erst einmal um und verwende DATE für Datumsangaben. Dann schaust in die Doku von MySQL, wie da sowas wie CASE WHEN da umgesetzt werden kann, siehe dazu auch hier: http://dev.mysql.com/doc/refman/5.1/de/control-flow-functions.html

    Andreas
     
  5. luzie

    luzie Neuer Benutzer

    Hi,

    bei den Angaben der Wochen und Tage handelt es sich um ein reines Beispiel, ich dachte mir das etwas anschaulicher ist als pure Zahlenkolonnen.

    Luzie
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Ach so. Dann ist ja gut.

    Andreas
     
  7. ukulele

    ukulele Datenbank-Guru

    Code:
    SELECT    t2.*
    FROM    tabelle t2
    WHERE    t2.tag = 'Donnerstag'
    AND        t2.woche IN (    SELECT    t1.woche
                            FROM    tabelle t1
                            WHERE    t1.tag = 'Dienstag'
                            AND        t1.umsatz = 'xy' )
    So sollte es auch gehen.
     

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