首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在表中查询相同的数据,但输出行位置不同

如何在表中查询相同的数据,但输出行位置不同
EN

Stack Overflow用户
提问于 2019-04-13 13:12:28
回答 1查看 30关注 0票数 1

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

我实际上制作了一个电表读数系统,我需要电流(第1栏)和先前(第2栏)的数据读取,这样我就可以计算电表的总消耗量。但我很难做到这一点。如有任何建议,将不胜感激。谢谢。:)

示例数据:

所需的查询输出:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-13 14:12:58

请记住,SQL表行没有固有的顺序。只是一袋袋的记录。

您必须根据某些列值或其他条件对它们进行排序。在你的情况下,我想你想要的是每个帐户的最新和第二次最新的表读数。想必您的阅读表有如下所示的列:

代码语言:javascript
复制
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

我想你需要这样的结果集

代码语言:javascript
复制
   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)

代码语言:javascript
复制
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

注意,在您的业务流程中,处理每个客户的第一次阅读都需要考虑一些问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55665844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档