使用SQLite在查询中查找行中的差异
我有一个包含各种产品价格的SQLite表。 这是一个快照表,因此它包含5分钟间隔的价格。 我想编写一个查询,将每个项目的价格差异从一行返回到下一行。
这些列是id(自动增量),record_id(产品的id),价格(当时的价格),时间(自纪元以来的秒数)
我试图返回一个包含间隔值差异的“差异”列。
Given the following id record_id price time 1 apple001 36.00 ... 67 apple001 37.87 ... 765 apple001 45.82 ... 892 apple001 26.76 ... I'd like it to return id record_id price time difference 1 apple001 36.00 ... 0 67 apple001 37.87 ... 1.87 765 apple001 45.82 ... 7.95 892 apple001 26.76 ... -19.06
SQLite有可能吗?
其次,如果有可能 - 是否有办法将其限制在最近5次左右的记录中?
我会很感激任何帮助,谢谢。
只是想添加一些东西。 我已经找到了在其他数据库中这样做的方法,但我使用的是XULRunner,因此SQLite。 这就是为什么我正在使用它。
第二个问题可能需要澄清,我期待按时间排序并分析最后5条记录。 如果需要的话,我可以单独处理这个问题。
这是一个MySQL解决方案。 这是我前进的方法,但交易断路器是“如果表格包含序列列但存在空位,请对其重新编号,如果该表不包含此列,请添加一个”。 通过设计,这种情况存在差距,因为有许多记录一次更新,并且不会按顺序排列。
我不知道SQLite中是否存在一些限制,但是您可以尝试以下在Sql Server中工作的语句。
如果时差不变(你声明它是5分钟),你可以写:
SELECT A.id, A.record_id, A.price, A.time, ISNULL(A.price - B.price, 0) AS difference
FROM Table1 as A
LEFT OUTER JOIN Table1 B ON A.record_id = B.record_id AND A.time - B.time = 5
除此以外
SELECT A.id, A.record_id, A.price, A.time, ISNULL(A.price - B.price, 0) AS difference
FROM Table1 as A
LEFT OUTER JOIN Table1 B ON B.record_id = A.record_id
AND B.time = (SELECT MAX(time) FROM Table1 C WHERE C.time < A.time AND C.record_id = A.record_id)
没有连接的声明如下
SELECT id, record_id, price, time,
(SELECT A.price - B.price
FROM Table1 as B
WHERE B.record_id = A.record_id AND
B.time = (SELECT MAX(time) FROM Table1 C WHERE C.time < A.time AND C.record_id = A.record_id)) AS difference
FROM Table1 as A
我希望他们中的一个能帮助你。
链接地址: http://www.djcxy.com/p/62057.html上一篇: Finding the difference in rows in query using SQLite
下一篇: How can I close the Foundation topbar menu when a link is clicked?