2017-02-03 3 views
0

I über eine SQL-Tabelle wie folgt aufweisen:aus jeder Spalte neuesten Eintrag auswählen

id | timestamp | position | size | level 
  • id der Primärschlüssel ist, und wird immer ein Wert
  • timestamp haben, ist eine numerische Zeit-Darstellung
  • position, size und level können einen Wert haben, oder sie können null sein

Ich möchte eine Abfrage ausführen, die die neueste Nicht-Null-Position, Größe und Ebene erhält, wie durch den Zeitstempel in der Zeile bestimmt, zu der sie gehört.

Wie mache ich das?

+2

Bitte markieren Sie Ihre Datenbank, veröffentlichen Sie Ihre Versuche und zeigen Sie einige Beispieldaten an. –

+0

... und das gewünschte Ergebnis –

+0

Was bedeutet das? – rygo6

Antwort

1

Wenn Sie Werte suchen in verschiedene Zeilen, dann können Sie tun:

select (select position 
     from t 
     where position is not null 
     order by timestamp desc 
     fetch first 1 row only 
     ) as position, 
     (select size 
     from t 
     where size is not null 
     order by timestamp desc 
     fetch first 1 row only 
     ) as size, 
     (select level 
     from t 
     where level is not null 
     order by timestamp desc 
     fetch first 1 row only 
     ) as level; 

Hinweis: Dies ist (fast vollständig) Standard-SQL. Die genaue Syntax kann abhängig von der verwendeten Datenbank variieren.

3
SELECT t.* 
FROM yourTable t 
WHERE t.timestamp = (SELECT MAX(timestamp) FROM yourTable WHERE position IS NOT NULL) 

Wenn Sie wollen auch nicht NULL Werte für die size und level Spalten erzwingen, wenn die max Zeitstempel zu finden, können Sie die folgende Unterabfrage verwenden statt:

SELECT MAX(timestamp) FROM yourTable WHERE position IS NOT NULL AND 
              size IS NOT NULL AND 
              level IS NOT NULL 
+0

Gibt es trotzdem, um es alle Spalten zurückzugeben, ohne den Namen jedes mit IS NOT NULL – rygo6

+0

If zu geben Wenn Sie überprüfen möchten, dass alle drei Spalten nicht null sind, müssen Sie diese Prüfung durchführen. Woran denkst du? –

Verwandte Themen