Ich möchte eine Ansicht in SQLite erstellen, in der ein Feld in einer Zeile vom Wert eines Felds in der vorherigen Zeile abhängt. Ich könnte dies in Oracle mit der analytischen Funktion LAG
tun, aber nicht sicher, wie es in SQLite zu gehen.Erstellen einer SQLite-Ansicht, in der eine Zeile von der vorherigen Zeile abhängt
Zum Beispiel, wenn mein Tisch aussieht:
ITEM DAY PRICE
apple 2011-01-07 1.25
orange 2011-01-02 1.00
apple 2011-01-01 1.00
orange 2011-01-03 2.00
apple 2011-01-08 1.00
apple 2011-01-10 1.50
ich meine Ansicht nach aussehen möchte, mit WHERE item = 'apple'
:
DAY PRICE CHANGE
2011-01-01 1.00 (null)
2011-01-07 1.25 0.25
2011-01-08 2.00 0.75
2011-01-10 1.50 -0.50
Edit:
Das Äquivalent der Abfrage, die ich suchen würde in Oracle etwas aussehen (habe nicht versucht, aber ich denke, das ist richtig):
SELECT day, price,
price - LAG(price, 1) OVER (ORDER BY day) AS change
FROM mytable
WHERE item = 'apple'
Definieren Sie "vorherige". Sieht aus wie der einzige erlaubte Datensatz für das Datum einen Tag vor dem aktuellen Datensatz. Ist das immer wahr? –
Nein. Ich habe das Beispiel erweitert. Mit "vorhergehend" meine ich im Grunde die Zeile Zeile vor der fraglichen, sobald sie bestellt sind. – eaolson
Definieren Sie "geordnet". Grundsätzlich besteht das Problem darin, dass SQL-Datenbanken (per definitionem) kein Konzept der Zeilenreihenfolge haben, abgesehen von dem, was Sie beim Abrufen speziell nach dem Spaltennamen angeben. Sie können im Allgemeinen das gewünschte Ergebnis erhalten, aber Sie müssen die "vorherige Zeile" über die relationale Algebra in Ihrer Ansichtsdefinition ableiten, und um dies zu tun, müssen Sie sich sehr klar darüber sein, wie Sie "vorheriges" im Allgemeinen definieren Sprache. –