mikrocontroller.net

Forum: PC-Programmierung MYSQL-Query (GROUP BY, ORDER.)


Autor: Fabian H. (hdr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe grad ein Brett vor'm Kopf... Wie kann ich möglichst elegent 
folgendes Problem formulieren (vereinfacht):

Tabelle:

ID       NameID        Datum
=====================================
1        1             2009-09-16 00:00:01
2        1             2009-09-16 00:00:02
3        1             2009-09-16 00:00:03
4        2             2009-09-16 00:00:04
5        2             2009-09-16 00:00:05

6        1             2009-09-17 00:00:01
7        1             2009-09-17 00:00:02

8        1             2009-09-18 00:00:01
9        1             2009-09-18 00:00:02
10       2             2009-09-18 00:00:03
11       3             2009-09-18 00:00:04
12       3             2009-09-18 00:00:05


Als Ergebnis meiner Abfrage möchte ich folgendes bekommen:
ID       NameID        Datum
===============================================
9        1             2009-09-18 00:00:01
10       2             2009-09-18 00:00:03
12       3             2009-09-18 00:00:05


Mein Versuch (vereinfacht) war folgender:

SELECT `ID`, `NameID`, `Datum` FROM `Tabelle` WHERE `Datum` LIKE 
'2009-09-18 %' AND ORDER BY `Datum` DESC GROUP BY `NameID`

Das ganze funktioniert aber leider nicht, da man erst nach dem 
Gruppieren sortieren kann. Drehe ich das um, so erhalte ich nicht den 
"spätesten" Eintrag am Tag pro Person, sondern den Ersten.

Sollte man das ganze mit einem verschachtelten SELECT lösen oder gibt es 
eine einfachere Variante?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier's mal so:
SELECT max(`ID`), `NameID`, max(`Datum`) FROM `Tabelle` WHERE `Datum` 
LIKE '2009-09-18 %' GROUP BY `NameID` order by 3
wobei dabei max(id) aber nicht zwingend zu max(datum) passt.

Autor: Fabian H. (hdr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, funktioniert leider nicht, da die Tabelle in Wirklichkeit noch 
mehr Spalten hat, dessen Zuordnung dann verloren gehen. Außerdem liefert 
mir dann die Ausgabe nur eine Zeile.

Autor: Dr. G. Reed (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sowas ähnliches hab ich heut in Oracle gemacht, falls MySQL auch sowas 
wie dir Analytical Functions wie Oracle hat, versuch mal sowas:

http://sql-plsql-de.blogspot.com/2008/05/den-jngst...

Autor: Dr. G. Reed (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in den Kommentaren ist dort auch eine nicht so oracle-spezifische Lösung 
zu finden

Autor: Fabian H. (hdr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, ich habe es jetzt so gelöst:

SELECT * FROM (SELECT ID, NameID, Datum FROM Tabelle WHERE Datum LIKE 
'2009-09-16%' ORDER BY Datum DESC) as virtual_table GROUP BY NameID

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.