我的数据库表中有一些记录。
用户传递开始日期和结束日期,然后期望输出。如果用户传递了同一月份的开始日期和结束日期,则应该仅显示一条记录,但是如果将结束日期延长一个或多个月,则应该显示按月记录。
目前,我能够在执行该查询时收集总数据。
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
,但这并没有帮助我。
我该怎么做?
任何帮助将不胜感激。
答案 0 :(得分:0)
选择m。data_date_time
AS'Data_Date_Time',SUM(m。kwh
)AS total_kwh,m。cust_id
AS'Customer_ID',m。msn
AS MSN ,date_format(data_date_time,“%Y-%m”)为monYear
在mdc_meters_data
处m。data_date_time >=
2020-04-01 00:00:00' AND m.
处data_date_time` <='2020-05-31 00:00:00'按年份分组
希望它会帮助您获得想法
答案 1 :(得分:0)
请检查此答案
function reverse(s) {
if (s.length===1) return s;
return reverse(s.slice(1)) + s[0];
}
答案 2 :(得分:0)
您将必须正确使用GROUP BY
。
SELECT DATE_FORMAT('m.`data_date_time`, '%Y-%m') AS Data_Date_Time,
SUM(m.`kwh`) AS total_kwh,
m.`cust_id` AS Customer_ID,
m.`msn` AS 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 23:59:59'
GROUP BY Customer_ID, Data_Date_Time, MSN
现在上述查询的问题是您不需要按MSN
分组结果
一种解决方法是在选择列表中未聚合的any_value
列周围使用MSN
函数。这只会从匹配列表中选择任何MSN
值,并确保结果中仍然只显示2个条目。
SELECT any_value(DATE_FORMAT('m.`data_date_time`, '%Y-%m')) AS Data_Date_Time,
SUM(m.`kwh`) AS total_kwh,
m.`cust_id` AS Customer_ID,
any_value(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 23:59:59'
GROUP BY Customer_ID, Data_Date_Time
另外,通过将范围扩展到时间23:59:59来注意查询中是如何将5月31日包括在内的。