SQL查询计算当前和前一天的值之间的差异
Posted
技术标签:
【中文标题】SQL查询计算当前和前一天的值之间的差异【英文标题】:SQL query to calculate the difference between current and previous day's value 【发布时间】:2011-07-21 15:17:32 【问题描述】:我有一个 Access .mdb 数据库,其中的表类似于:
+---------+------+--------+
| date | value |
+---------+------+--------+
|2011-05-04 12:00 | 45.9 |
|2011-05-05 12:00 | 21.2 |
|2011-05-06 12:00 | 32.2 |
|2011-05-07 12:00 | 30.4 |
|2011-05-08 12:00 | 40.4 |
|2011-05-09 12:00 | 19.8 |
|2011-05-10 12:00 | 29.7 |
+-------+---------+-------+
我想创建一个查询,该查询将返回从前一天的值减去一个值得出的值。
例如:查询将计算 (21.2-45.9) 并返回 -24.7 (32.2-21.2) 并返回 -11.0 (30.4-32.2) 并返回 -1.8 等等
如何在 SELECT 语句中完成此操作?
【问题讨论】:
在 Oracle 中,这将是一个 LEAD 或 LAG 操作。很确定不支持访问。你需要做一些程序性的事情。 @Randy:这不是真的。对于这个问题空间肯定有基于集合的方法 这必须是家庭作业——在过去的几天里,我已经看到了大约 3 个与此类似的其他问题...... @Jed - 如果这是家庭作业,请标记它。这个论坛上的人通常非常擅长确保在这些情况下提问者理解问题的重点。 这不是家庭作业(我什至不在学校)。它适用于计算仪表使用量的工业过程控制器。话虽如此,我希望我在学校的时候能有类似 StackO 的东西;) 【参考方案1】:您可以使用在相关表上使用自连接的查询:
SELECT
t.dateValue , t.singleValue - IIF(ISNULL(tNext.singleValue), 0, tNext.singleValue)
FROM
test t
LEFT JOIN test tNext
ON t.dateValue = DateAdd("d", -1, tNext.dateValue)
WHERE
t.dateValue = #2011-05-08 12:00#;
输出
dateValue Expr1001
---------------------- ----------------
05/08/2011 12:00:00 PM 20.6000022888184
DDL 和下面的插入
CREATE TABLE test (dateValue DATETIME, singleValue SINGLE);
INSERT INTO test VALUES (#2011-05-04 12:00#, 45.9);
INSERT INTO test VALUES (#2011-05-05 12:00#, 21.2);
INSERT INTO test VALUES (#2011-05-06 12:00#, 32.2);
INSERT INTO test VALUES (#2011-05-07 12:00#, 30.4);
INSERT INTO test VALUES (#2011-05-08 12:00#, 40.4);
INSERT INTO test VALUES (#2011-05-09 12:00#, 19.8);
INSERT INTO test VALUES (#2011-05-10 12:00#, 29.7);
【讨论】:
【参考方案2】:这是对我有用的查询:
SELECT t2.date, t2.value-t1.value
FROM Table1 AS t1, Table1 AS t2
WHERE t2.date=DATEADD("d",1,t1.date);
再次感谢汤姆 H。
【讨论】:
以上是关于SQL查询计算当前和前一天的值之间的差异的主要内容,如果未能解决你的问题,请参考以下文章