MySQL显示每月明智的记录

时间:2020-05-02 04:51:23

标签: mysql datetime sum

我的数据库表中有一些记录。

用户传递开始日期和结束日期,然后期望输出。如果用户传递了同一月份的开始日期和结束日期,则应该仅显示一条记录,但是如果将结束日期延长一个或多个月,则应该显示按月记录。

目前,我能够在执行该查询时收集总数据。

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,但这并没有帮助我。

我该怎么做?

任何帮助将不胜感激。

3 个答案:

答案 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日包括在内的。