首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL显示月份wise记录

MySQL显示月份wise记录
EN

Stack Overflow用户
提问于 2020-05-02 04:51:23
回答 3查看 80关注 0票数 1

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

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

目前,我能够在执行此查询时收集全部数据。

代码语言:javascript
复制
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'

输出

代码语言:javascript
复制
Data_Date_Time      == total_kwh == Customer_ID == MSN
2020-04-01 11:44:13 || 95585     || 37010114707 || 7898985212

预期输出

由于月份结束日期是05,所以它应该显示如下所示的两个记录

代码语言:javascript
复制
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放出来,但这对我没有帮助。

我该怎么做?

任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

发布于 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。

希望它能帮助你获得灵感。

票数 0
EN

Stack Overflow用户

发布于 2020-05-02 05:25:43

请核对一下这个答案

代码语言:javascript
复制
    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'
票数 0
EN

Stack Overflow用户

发布于 2020-05-02 05:50:51

您必须以正确的方式使用GROUP BY

代码语言:javascript
复制
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个条目。

代码语言:javascript
复制
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日。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61554627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档