【发布时间】:2020-05-02 04:51:23
【问题描述】:
我的数据库表中有一些记录。
用户传递开始和结束日期,然后期望输出。如果用户通过了同一个月的开始日期和结束日期,那么它应该只显示一条记录,但如果结束日期延长一个月或更多个月,那么它应该显示月份明智的记录。
现在我可以在执行此查询时收集总数据。
SELECT m.data_date_time
, SUM(m.kwh) total_kwh
, m.cust_id Customer_ID
, m.msn
FROM mdc_meters_data m
WHERE m.data_date_time >= '2020-04-01 00:00:00'
AND m.data_date_time <= '2020-05-31 00:00:00'
输出
Data_Date_Time == total_kwh == Customer_ID == MSN
2020-04-01 11:44:13 || 95585 || 37010114707 || 7898985212
预期输出
由于月底日期是05,所以它应该显示如下两条记录
Data_Date_Time == total_kwh == Customer_ID == MSN
2020-04-01 11:44:13 || 50000 || 37010114707 || 7898985212
2020-05-01 10:25:05 || 45585 || 37010114707 || 7898985212
我尝试输入GroupBy data_date_time,但没有帮助。
我该怎么做?
任何帮助将不胜感激。
【问题讨论】:
-
如果没有 GROUP BY 子句,并且在 SELECT 列表中使用 SUM() 聚合,查询将不会返回超过一行。 (如果 sql_mode 包含 ONLY_FULL_GROUP_BY 则 MySQL 将为此查询返回错误,行为与标准和大多数其他 RDBMS Oracle、SQL Server、Teradata 等更一致。MySQL 特定扩展允许查询返回行,但返回的值对于 SELECT 列表中的非聚合表达式 (cust_id, msn) 是 indeterminate。这些值将从折叠组中的某些行返回,但不能保证是哪一行。)