我在数据库中有一个表,就像下面的示例一样,我想查询相同的数据,但是在第2列中,数据的位置比以前的数据大1行。
P.S。我实际上是在为电表读数制作系统,我需要读取Current(第1列)和Previous(第2列)数据,以便能够计算出电表的总消耗量。但是我很难做到这一点。任何建议将不胜感激。谢谢。 :)
示例数据:
所需查询输出:
答案 0 :(得分:2)
请记住,SQL表行没有固有的顺序。它们只是记录袋。
您必须根据某些列值或其他条件对它们进行排序。对于您的情况,我想您需要每个帐户的最近和第二次读表。大概您的阅读表中的列是这样的:
reading_id customer_id datestamp value
1 1122 2009-02-11 112
2 1234 2009-02-13 18
3 1122 2009-03-08 125
4 1234 2009-03-10 40
5 1122 2009-04-12 160
6 1234 2009-04-11 62
我想您需要这种结果集
customer_id datestamp value previous
1122 2009-03-08 125 112
1122 2009-04-12 160 125
1234 ...etcetera.
你怎么能得到这个?对于表中的每一行,您都需要一种方法来查找同一位客户的先前读数:即带有
的行这是所谓的关联子查询的工作。这是带有子查询的查询。 (https://www.db-fiddle.com/f/hWGAbq4uAbA5f15j7oZY9o/0)
SELECT aft.customer_id,
aft.datestamp,
( SELECT bef.value
FROM r bef /* row from table.... */
WHERE bef.datestamp < aft.datestamp /* with datestamp < present datestamp */
AND bef.customer_id = aft.customer_id /* and same customer id */
ORDER BY bef.datestamp DESC /* most recent first */
LIMIT 1 /* only most recent */
) prev,
aft.value
FROM r aft
ORDER BY aft.customer_id, aft.datestamp
请注意,处理每个客户的一读内容需要在您的业务流程中进行一些思考。