gpt4 book ai didi

mysql - 如何在一个表中查询相同数据但输出行位置不同

转载 作者:行者123 更新时间:2023-11-29 05:49:37 25 4
gpt4 key购买 nike

我的数据库中有一个表,就像下面的示例一样,我想查询相同的数据,但在第 2 列中,数据的位置将比之前的数据大 1 行。

附言我实际上正在制作一个电表读数系统,我需要当前(第 1 列)和以前(第 2 列)数据读数,以便我可以计算电表的总消耗量。但我很难做到。任何建议将不胜感激。谢谢。 :)

示例数据:

enter image description here

所需的查询输出:

enter image description here

最佳答案

请记住,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.

你怎么能得到这个?对于表中的每一行,您需要一种方法来查找同一客户的先前读数:即带有

  • 相同的客户 ID
  • 在当前日期戳之前出现的最新日期戳。

这是所谓的相关子查询的工作。这是查询及其子查询。 (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

请注意,在您的业务流程中处理每位客户的第一次阅读需要一些思考。

关于mysql - 如何在一个表中查询相同数据但输出行位置不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55665844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com