我想在SQLite中创建一个视图,其中一行中的字段取决于前一行中的一个字段的值。我可以在Oracle中使用LAG
分析函数完成此操作,但不确定如何在SQLite中进行操作。创建一个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
我想我的观点的样子,与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'
定义“上一个”。看起来像是当前记录前一天的单个允许记录。这总是如此吗? – 2012-04-04 01:15:42
不,我已经扩展了这个例子。通过“之前”,我基本上是指在所讨论的行之前的行列,一旦它们被订购。 – eaolson 2012-04-04 01:41:55
定义“有序”。基本上,问题在于SQL数据库(根据定义)没有行定序的概念,除了专门指定的内容(按列名称)检索时。通常你可以得到你想要的结果,但是你必须通过你的视图定义中的关系代数来导出“前一行”,为此,你需要非常清楚你如何在plain中定义“previous”语言。 – 2012-04-04 10:51:03