Vorrei creare una vista in SQLite in cui un campo in una riga dipende dal valore di un campo nella riga precedente. Potrei farlo in Oracle usando la funzione analitica LAG
, ma non sono sicuro di come farlo in SQLite.Creare una vista SQLite in cui una riga dipende dalla riga precedente
Per esempio, se il mio tavolo sembrava:
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
Vorrei che il mio scopo di assomigliare, con 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:
L'equivalente del la query che sto cercando avrebbe cercato in Oracle qualcosa come (non ho provato questo, ma penso che sia corretto):
SELECT day, price,
price - LAG(price, 1) OVER (ORDER BY day) AS change
FROM mytable
WHERE item = 'apple'
Definire "precedente". Sembra il singolo record consentito per la data un giorno prima del record corrente. È sempre vero? –
No. Ho ampliato l'esempio. Con "precedente" intendo fondamentalmente la fila di righe prima di quella in questione, una volta ordinate. – eaolson
Definisci "ordinato". Fondamentalmente, il problema è che i database SQL (per definizione) non hanno alcun concetto di ordinamento delle righe a parte quello che si specifica specificamente, per nome di colonna, sul recupero. In genere puoi ottenere il risultato desiderato, ma dovrai ricavare la "riga precedente" nell'algebra relazionale nella definizione della tua vista e, per farlo, devi essere molto chiaro su come definire "precedente" in chiaro linguaggio. –