Chriz: SQL-Abfrage - kein Order By max() AS ??

Moin...

Mal eine kurze Frage:
Mein SQL-Query weigert sich im WHERE-Zweig, nach einem neu erstellten Feld auszuwählen. Kann mir jemand mit dem richtigen Syntax auf die Sprünge helfen??

SELECT
            *,
            max(date + time) AS datum
         FROM events
         datum < '1161424143'
         GROUP BY id_concert
         ORDER BY datum DESC

Er sagt mir
Unknown column 'datum' in 'where clause

aber warum kann ich dann nach datum sortieren??

Ich raff es nicht :(

Gruß,
Chriz

  1. Hallo Chriz!

    SELECT
                *,
                max(date + time) AS datum
             FROM events
             datum < '1161424143'
             GROUP BY id_concert
             ORDER BY datum DESC

    Where is your where? ;)

    Unknown column 'datum' in 'where clause

    Zuerst wird das where ausgewertet und dann erst 'datum'. Deswegen geht's nicht!

    Probier mal:

      
             SELECT  
                *,  
                max(date + time) AS datum  
             FROM events  
             HAVING datum < '1161424143'  
             GROUP BY id_concert  
             ORDER BY datum DESC  
    
    

    lg Flo

    1. Hallo

      Zuerst wird das where ausgewertet und dann erst 'datum'. Deswegen geht's nicht!

      Richtig. Deswegen gibt es, wie z.B. auch in Datensätze gruppieren mit SQL nachzulesen ist, HAVING. Allerdings ist die Reihenfolge der Klauseln festgelegt - und HAVING kommt folgerichtig _nach_ GROUP BY, Daher

        
           SELECT  
              id_concert,  
              max(date + time) AS datum  
           FROM events  
           GROUP BY id_concert  
           HAVING datum < '1161424143'  -- Warum ein Zeichenkettenvergleich?  
           ORDER BY datum DESC  
      
      

      Da nach keiner anderen Spalte als id_concert gruppiert wurde, habe ich alle anderen Spalten rausgeworfen. Nur MySQL läßt solche Schlampigkeit zu - und das Ergebnis ist laut Handbuch unvorhersagbar. Unvorhersagbare Ergebnisse sind unbrauchbar.

      Möchte der OP weitere Detailinformationen, so bekommt er diese typischerweise über eine korrelierte Unterabfrage, was MySQL 4.1 und neuer voraussetzt.

      Der Datentyp der Spalten "date" und "time" scheint ebenfalls ungünstig gewählt zu sein. Es gibt den Datentyp DATETIME :-) Es gibt Datums- und Zeitfunktionen.

      Freundliche Grüße

      Vinzenz

      1. yo,

        Nur MySQL läßt solche Schlampigkeit zu - und das Ergebnis ist laut Handbuch unvorhersagbar. Unvorhersagbare Ergebnisse sind unbrauchbar.

        nicht ganz, das handbuch sagt nur, wenn der rest der spalten, über die nicht gruppiert wurde unterschiedliche werte aufweisen, nur dann sind die ergebnisse unvorhersehbar. aber da eine id benutzt wurde, ist es sehr wahrscheinlich, dass die benutzung laut mysql korrekt ist. ich stimmte dir aber zu, das ist grausam.

        noch eine ergänzung, HAVING hat hier nichts zu suchen, auch nicht, weil man damit den alias namen benutzen kann. alles was man in der WHERE klausel ausschließen kann, sollte auch da rein geschreiben werden. HAVING macht nru sinn, in benutzung mit aggregat-funktion.

        Ilja