sql - 创建一个 SQLite View ,其中一行取决于前一行

标签 sql sqlite

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

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

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

我希望我的 View 看起来像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

编辑:

我正在寻找的查询的等价物将在 Oracle 中查找类似的东西(还没有尝试过,但我认为这是正确的):

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

最佳答案

Oracle 等效项是正确的。从 SQLite 3.25.0 开始你可以在本地使用 LAG:

WITH mytable(ITEM,DAY,PRICE) AS (
    VALUES
    ('apple',  CAST('20110107' AS DATE),    1.25),
    ('orange', CAST('20110102' AS DATE),    1.00),
    ('apple',  CAST('20110101' AS DATE),    1.00),
    ('orange', CAST('20110103' AS DATE),    2.00),
    ('apple',  CAST('20110108' AS DATE),    2.00),
    ('apple',  CAST('20110110' AS DATE),    1.50)
)
SELECT day, price, price-LAG(price) OVER (ORDER BY day) AS change
FROM mytable
WHERE item = 'apple'
ORDER BY DAY;

db<>fiddle demo

关于sql - 创建一个 SQLite View ,其中一行取决于前一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10003313/

相关文章:

sql - postgresql 触发器 : disable auto commit and set isolation level

php - sql 如果之前不存在则最好插入行

sqlite - Nullpointer database.open(), getwritabledatabase

database - 我们如何保存在sqlite3中创建的数据库

android - 用大量数据填充 SQLite

android - Android SQLite替换成无法正常工作

sql - 在 SQL 中一次性合并间隔

MySQL:用其他行值计算和更新一行?

mysql - 执行数学函数作为默认值 MySQL

sql - 使用子选择来完成LEFT JOIN