我的数据库表中有一些记录。
用户传递开始日期和结束日期,然后期望输出。如果用户传递相同月份的开始日期和结束日期,则应该只显示一条记录,但如果将结束日期延长了一个月或多个月,则应该显示月明智记录。
目前,我能够在执行此查询时收集全部数据。
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放出来,但这对我没有帮助。
我该怎么做?
任何帮助都将不胜感激。
发布于 2020-05-02 05:13:47
选择m.data_date_time作为'Data_Date_Time',SUM(m.kwh)作为total_kwh,m.cust_id作为'Customer_ID',m.msn作为MSN,date_format(data_date_time,"%Y-%m")作为monYear从mdc_meters_data m,其中m.data_date_time >= 2020-04-01 00:00:00' AND m.data_date_Time‘<=’2020-05-31 00:00:00‘组按monYear。
希望它能帮助你获得灵感。
发布于 2020-05-02 05:25:43
请核对一下这个答案
SELECT m.`data_date_time` AS 'Data_Date_Time', SUM(m.`kwh`) AS total_kwh, m.`cust_id` AS 'Customer_ID', m.`msn` AS MSN
FROM table AS r JOIN (
SELECT MAX(m.`data_date_time`) AS data_date_time
FROM table AS t
GROUP BY YEAR(m.`data_date_time`), MONTH(t.data_date_time)
) AS x USING (data_date_time)
`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'发布于 2020-05-02 05:50:51
您必须以正确的方式使用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日。
https://stackoverflow.com/questions/61554627
复制相似问题