【问题标题】:How do you select all records in a 24-hour time period and summarize the data in SQL?如何选择 24 小时时间段内的所有记录并在 SQL 中汇总数据?
【发布时间】:2015-12-16 21:44:05
【问题描述】:

我有一个 SQL 2014 表,其中包含燃气表消耗的每小时记录。每条记录都包含 DATETIME 日期以及过去一小时的仪表标识符和相关的气体消耗量。我遇到的问题是我们需要知道从上午 10:00 记录到第二天上午 9:00 记录的每日总消费量。这段时间被认为是我们的“加油日”。我的最终结果是列出每个燃气表,并列出每个“燃气日”的燃气消耗摘要。下面列出的是我的数据示例:

MeterID LogDate 消耗

1007643 2015-10-30 01:00:00:00 19
1007643 2015-10-30 02:00:00:00 27
1007643 2015-10-30 03:00:00:00 26
1007643 2015-10-30 04:00:00:00 27
1007643 2015-10-30 05:00:00:00 26
1007643 2015-10-30 06:00:00:00 26
1007643 2015-10-30 07:00:00:00 38
1007643 2015-10-30 08:00:00:00 50
1007643 2015-10-30 09:00:00:00 35
1007643 2015-10-30 10:00:00:00 45
1007643 2015-10-30 11:00:00:00 46
1007643 2015-10-30 12:00:00:00 44
1007643 2015-10-30 13:00:00:00 38
1007643 2015-10-30 14:00:00:00 45
1007643 2015-10-30 15:00:00:00 35
1007643 2015-10-30 16:00:00:00 47
1007643 2015-10-30 17:00:00:00 44
1007643 2015-10-30 18:00:00:00 40
1007643 2015-10-30 19:00:00:00 27
1007643 2015-10-30 20:00:00:00 48
1007643 2015-10-30 21:00:00:00 48
1007643 2015-10-30 22:00:00:00 48
1007643 2015-10-30 23:00:00:00 28
1007643 2015-10-31 00:00:00:00 6
1007643 2015-10-31 01:00:00:00 6
1007643 2015-10-31 02:00:00:00 6
1007643 2015-10-31 03:00:00:00 7
1007643 2015-10-31 04:00:00:00 6
1007643 2015-10-31 05:00:00:00 6
1007643 2015-10-31 06:00:00:00 7
1007643 2015-10-31 07:00:00:00 6
1007643 2015-10-31 08:00:00:00 6
1007643 2015-10-31 09:00:00:00 6
1007643 2015-10-31 10:00:00:00 15
1007643 2015-10-31 11:00:00:00 96
1007643 2015-10-31 12:00:00:00 45

上面示例的结束结果(包含比一 (1) 个“Gas Day”所需的记录更多的记录)是开始添加从 2015-10-30 10:00:00:00 记录开始的消耗列,并且以 2015-10-31 09:00:00:00 记录结束。该查询将返回以下内容:

1007643 2015-10-31 645

我确信这很简单,但我是 SQL 新手,希望能提供任何帮助。

【问题讨论】:

    标签: sql-server date datetime


    【解决方案1】:

    要查找每个仪表 ID 的每个“加油日”的总数,您可以执行以下操作:

    SELECT [MeterID], MAX(CONVERT(DATE, [LogDate])), SUM([Consumption])
    FROM tblName
    GROUP BY [MeterID], DATEDIFF(hh,'1900-01-01 10:00:00', [LogDate])/24
    

    【讨论】:

      【解决方案2】:

      假设表的名称是 GAS,日期字段是 DT,而要求和的字段是 AMT,如果你想得到昨天的总数(伪 SQL),它会是这样的:

      SELECT SUM(AMT) FROM GAS WHERE DT BETWEEN ('2015-12-15 00:10:00') AND ('2015-12-16 09:00:00')
      

      【讨论】:

      • 如果我只想在查询中获得一天,这将起作用。我需要汇总每个仪表的每一天的所有记录。谢谢!
      猜你喜欢
      • 2015-04-22
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 2012-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多