我想在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)
假设你不删除它会起作用:
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 始终增加的假设下工作的。
| 归档时间: |
|
| 查看次数: |
6034 次 |
| 最近记录: |