3 Stimmen

den letzten Eintrag pro Tag und die entsprechenden Daten auswählen

Ich habe eine Tabelle in SQLite:

CREATE TABLE test_results(timestamp TEXT, npass INTEGER, nfails INTEGER)

Ich möchte die letzten Informationen zum Bestehen/Nichtbestehen für jeden Tag zurückgeben. Zum Beispiel, wenn die Tabelle enthält...

2009-08-31 23:30:19|0|24
2009-08-31 23:37:18|0|24
2009-08-31 23:40:00|0|24
2009-09-01 19:02:13|0|2
2009-09-01 19:08:24|2|0
2009-09-01 19:20:29|2|0

Ich möchte, dass eine Select-Anweisung zurückgibt...

2009-08-31 23:40:00|0|24
2009-09-01 19:20:29|2|0

Vielen Dank im Voraus!

10voto

OMG Ponies Punkte 312816

Versuchen Sie es:

SELECT t.timestamp,
       t.npass,
       t.nfails
  FROM TEST_RESULTS t
  JOIN (SELECT MAX(tt.timestamp) 'maxtimestamp'
         FROM TEST_RESULTS tt
     GROUP BY date(tt.timestamp)) m ON m.maxtimestamp = t.timestamp

1voto

Nick Dandoulakis Punkte 41402

Sie können diese Abfrage versuchen:

SELECT * FROM (select * from test_results ORDER BY timestamp)
GROUP BY date(timestamp)

Wenn Sie auch den ersten Fail für jeden Tag erhalten möchten:

SELECT * FROM (select * from test_results ORDER BY timestamp DESC)
GROUP BY date(timestamp)

0voto

Bill Karwin Punkte 493880

So löse ich diese Art von Fragen:

SELECT t1.*
FROM test_results t1
LEFT OUTER JOIN test_results t2
  ON (DATE(t1.timestamp) = DATE(t2.timestamp) AND t1.timestamp < t2.timestamp)
WHERE t2.timestamp IS NULL;

Dies setzt voraus, dass die timestamp Spalte hat eine eindeutige oder Primärschlüssel-Beschränkung. Andernfalls besteht eine (geringe) Chance, dass Sie mehr als eine Zeile pro Tag erhalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X