创建一个SQLite视图,其中行取决于前一行

eao*_*son 8 sql sqlite

我想在SQLite中创建一个视图,其中一行中的字段取决于前一行中字段的值.我可以使用LAG分析函数在Oracle中执行此操作,但不确定如何在SQLite中执行此操作.

例如,如果我的表看起来像:

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
Run Code Online (Sandbox Code Playgroud)

我希望我的观点看起来像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
Run Code Online (Sandbox Code Playgroud)

编辑:

相当于我正在寻找的查询会在Oracle中看起来像(没试过这个,但我认为这是正确的):

SELECT day, price, 
       price - LAG( price, 1 ) OVER ( ORDER BY day ) AS change
  FROM mytable
 WHERE item = 'apple'
Run Code Online (Sandbox Code Playgroud)

cha*_*m15 0

假设你不删除它会起作用:


SELECT t2.DAY, t2.price, t2.price-t1.price 
FROM TABLENAME t1, TABLENAME t2 
WHERE t1.rowid=t2.rowid-1
Run Code Online (Sandbox Code Playgroud)

这是可行的,因为即使您没有在CREATE语句中指定,每一行都有自己的 rowid。

如果删除的话,就会变成:


SELECT t2.day, t2.price, t2.price-t1.price 
FROM 
     (SELECT l1.day, l1.price, 
          (SELECT COUNT(*) 
          FROM TABLENAME l2 
          WHERE l2.rowid < l1.rowid) AS count
      FROM TABLENAME l1) AS t1,
     (SELECT l1.day, l1.price, 
          (SELECT COUNT(*) 
          FROM TABLENAME l2 
          WHERE l2.rowid < l1.rowid) AS count
      FROM TABLENAME l1) AS t2
WHERE t1.count=t2.count-1
Run Code Online (Sandbox Code Playgroud)

这是在 rowid 始终增加的假设下工作的。