【问题标题】:MySQL Get last date in each month from column of datesMySQL从日期列中获取每个月的最后一个日期
【发布时间】:2010-02-17 15:55:01
【问题描述】:

一个例子如下所示;想象每个逗号分隔的日期是数据库中的一行

输入:- 2010-01-11、2010-01-18、2010-01-25、2010-02-01、2010-02-08、2010-02-15、2010-02-22、2010- 03-01它应该返回

输出:2010-01-25、2010-02-22、2010-03-01

输出是通过获取该月的最后一个日期得出的,请注意,对于 3 月,数据库中只有一个日期,因此我们使用该值。

如果有人能发布一些关于如何解决这个问题的伪 SQL,我将不胜感激。注意,我使用的是 My-SQL,所以这些日期函数可用。

干杯,

【问题讨论】:

    标签: sql mysql date


    【解决方案1】:
    SELECT MAX(datecol) FROM sometable
    GROUP BY YEAR(datecol), MONTH(datecol);
    

    group by 子句是按年和月的,因此它将处理超过一年的日期。

    【讨论】:

      【解决方案2】:
      SELECT max(date_field) FROM date_table GROUP BY YEAR(date_field), MONTH(date_field) ORDER BY date_field ASC;
      

      【讨论】:

      • 这仍然返回所有日期
      【解决方案3】:
      CREATE FUNCTION [dbo].[GetLastDateOfMonthBetweenTwoDates]
      
      (
      
          @startdate  DATETIME,
          @enddate    DATETIME
      
      )
      
      RETURNS TABLE
      AS
      
          RETURN (
              with cte
              as
              (
                  select cast(cast(year(@startdate) as varchar(4))+'-'+right(100+month(@startdate),2)+'-01' as datetime) ymd
                  union all
                  select dateadd(m,1,ymd)
                  from cte
                  where dateadd(m,1,ymd)<=dateadd(m,1,@enddate)
              )
              select dateadd(d,-1,ymd) ymd from cte where dateadd(d,-1,ymd) between @startdate and @enddate
          )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-13
        • 2012-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-07
        • 1970-01-01
        相关资源
        最近更新 更多