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

标签 mysql

我的数据库中有一个表,就像下面的示例一样,我想查询相同的数据,但在第 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/

相关文章:

mysql - 将数据存储在用户表中还是新表中?

c# - 当选择查询不返回任何行时,MySqlDataAdapter 不会清除 DataTable?

mysql - 从 ibd 文件恢复 *partitioned* mysql InnoDB 表

php - Yii 不验证 2 列的唯一索引

mysql - 将 WordPress 从 Linux 迁移到 Windows Server 2012 - 数据库问题

mysql - 为 umbraco cms 创建自动登录

java - Hibernate 4.3.5 不适用于 Oracle10g 数据库

mysql - 如何将记录字段添加到已排序的 SQL 结果中?

php - 访问cake php中的复合表数据

mysql - 无法将表类型更改为 MyISAM