【问题标题】:MYSQL return data not including current month/yearMYSQL 返回数据不包括当前月份/年份
【发布时间】:2015-09-16 10:31:00
【问题描述】:

我需要从将日期存储在单独的 YEAR 和 MONTH 列中的表中提取数据...

我只需要提取过去两年的数据...

这是我得到的:

SELECT 
        st_year as YEAR,
        st_month as  MONTH,
        count(*) 
    FROM 
        V1_Stable
    WHERE 
        st_year IS NOT NULL 
    AND
        st_month IS NOT NULL 
    GROUP BY 
        st_year,  st_month
    ORDER BY YEAR ASC, MONTH ASC;

基本上,这可以获得我需要的数据,但我需要将其限制为只能返回 24 个月,并且不包括当月的数据。

我尝试添加:

AND
(st_month != '$currentMonth' AND st_year != '$currentYear')

但这只是消除了当年的所有记录以及与当前月份匹配的任何月份...

【问题讨论】:

    标签: mysql


    【解决方案1】:

    试试这个

    SELECT 
        st_year as YEAR,
        st_month as  MONTH,
        count(*) 
    FROM 
        V1_Stable
    WHERE 
        st_year IS NOT NULL 
        AND DATE(CONCAT(st_year, '-', st_month, '-01')) BETWEEN DATE_SUB(DATE_SUB(CURRENT_DATE(), INTERVAL DAY(CURRENT_DATE()) DAY), INTERVAL 24 MONTH) AND DATE_SUB(CURRENT_DATE(), INTERVAL DAY(CURRENT_DATE()) DAY)
    AND
        st_month IS NOT NULL 
    GROUP BY 
        st_year,  st_month
    ORDER BY YEAR ASC, MONTH ASC;
    

    【讨论】:

    • 那是一些严重的 SICK SQL。谢谢老兄!
    • 为了获取 24 个月的数据(因为当前月份不包含在返回集中),我将“INTERVAL 24 MONTH”更改为“INTERVAL 25 MONTH”......这样效果很好。查询也会在 0.003 秒内返回...
    • 嗯,DATE_SUB(CURRENT_DATE(), INTERVAL DAY(CURRENT_DATE()) DAY) 返回上个月的最后一天并从中减去 24 个月,从技术上讲,您应该会回到 25 个月。即使这样,您也可以根据需要随意更改
    • 返回的数据回溯到2013年9月(即最近24个月的查询),但不包括当月应该回溯到2013年8月...
    • 是的,你是对的,它返回 2013-08-31 而它应该是 2013-08-01。使用 INTERVAL 25 MONTH 将返回 2013-07-31,这比您需要的 25 个月多一天。如果您需要通过使用 DATE_ADD(DATE_SUB(DATE_SUB(CURRENT_DATE(), INTERVAL DAY(CURRENT_DATE()) DAY), INTERVAL 25 MONTH), INTERVAL 1 DAY) 来修复该添加一天,它会给出 2013-08-01
    【解决方案2】:

    执行此操作的一种方法是将年/月列转换为月数。这使您可以在不涉及日期的情况下进行计算。 where 子句的相关部分是:

    where st_year * 12 + st_month >= year(now()) * 12 + month(now()) - 24
    

    编辑:

    如果您不想要当前月份,那么只需使用相同的逻辑:

    where st_year * 12 + st_month >= year(now()) * 12 + month(now()) - 24 and
          st_year * 12 + st_month < year(now()) * 12 + month(now())
    

    【讨论】:

      猜你喜欢
      • 2022-11-22
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多