【问题标题】:month starting another day一个月从另一天开始
【发布时间】:2016-04-18 08:15:26
【问题描述】:

我一直在使用MONTH() 函数来获取月份并按月份分组,就像这个示例查询一样。

SELECT 
    t1.ano,
    t1.mes,
    tempo_extra,
    tempo_ativo,
    tempo_extra / tempo_ativo AS volume_extra
FROM
    (SELECT 
        YEAR(`data`) AS ano,
            MONTH(`data`) AS mes,
            SUM(tempo) AS tempo_extra
    FROM
        rh.aprovacoes
    WHERE
        (tipo = 'BH' OR tipo = 'HE')
            AND estado = 1
            AND YEAR(aprovacoes.`data`) = 2016
    GROUP BY MONTH(`data`)) AS t1
        LEFT JOIN
    (SELECT 
        MONTH(`data`) AS mes, SUM(ativo) AS tempo_ativo
    FROM
        rh.processamento
    GROUP BY MONTH(`data`)) AS t2 ON t1.mes = t2.mes
ORDER BY mes DESC;

如何让月份从上个月的 23 日开始,到本月的 22 日结束。

例如,4 月从 3 月 23 日开始,到 4 月 22 日结束。

【问题讨论】:

  • 您可以随时使用 MONTH() 函数中传递的参数,就像您可以使用 SQL 中的 DATEADD 函数从您传递的日期中添加天数或减去天数一样。并根据日期返回月份。不过不确定 MySql。

标签: mysql sql


【解决方案1】:

只需从您的日期中减去 22 天并添加一个月:

(`data` - interval 22 day) + interval 1 month
  • 3 月 22 日 => 2 月 28 日或 29 日 => 3 月 28 日或 29 日
  • 3 月 23 日 => 3 月 1 日 => 4 月 1
  • 4 月 22 日 => 3 月 31 日 => 4 月 30
  • 4 月 23 日 => 4 月 1 日 => 5 月 1

SQL 小提琴:http://sqlfiddle.com/#!9/9eecb7d/54883

顺便说一句,无论年份如何,您的查询都会连接记录。我不认为这是需要的,所以在下面的查询中我已经纠正了这个。

SELECT t1.ano, t1.mes, tempo_extra, tempo_ativo, tempo_extra/tempo_ativo AS volume_extra
FROM 
(
  SELECT 
    YEAR(data - interval 22 day + interval 1 month) AS ano,
    MONTH(data - interval 22 day + interval 1 month) AS mes, 
    SUM(tempo) AS tempo_extra
  FROM rh.aprovacoes
  WHERE (tipo = 'BH' OR tipo = 'HE') 
  AND estado = 1 
  AND YEAR(aprovacoes.data - interval 22 day + interval 1 month) = 2016
  GROUP BY 
    YEAR(data - interval 22 day + interval 1 month), 
    MONTH(data - interval 22 day + interval 1 month)
) AS t1
LEFT JOIN 
(
  SELECT 
    YEAR(data - interval 22 day + interval 1 month) AS ano, 
    MONTH(data - interval 22 day + interval 1 month) AS mes, 
    SUM(ativo) AS tempo_ativo
  FROM rh.processamento
  GROUP BY 
    YEAR(data - interval 22 day + interval 1 month), 
    MONTH(data - interval 22 day + interval 1 month)
) AS t2 ON t1.ano = t2.ano AND t1.mes = t2.mes
ORDER BY t1.ano DESC, t1.mes DESC;

【讨论】:

  • 可爱,但 tipo 急需IN ('BH','HE')
  • @Arth:是的,IN 子句也是我的选择。
  • 谢谢@Thorsten Kettner。
猜你喜欢
  • 1970-01-01
  • 2022-11-24
  • 2020-03-13
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
  • 2015-07-04
  • 2020-04-06
  • 1970-01-01
相关资源
最近更新 更多