MySQL从日期列中获取每月的最后日期

时间:2010-02-17 15:55:02

标签: sql mysql date

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

输入: - 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,因此可以使用这些日期函数。

干杯,

3 个答案:

答案 0 :(得分:9)

SELECT MAX(datecol) FROM sometable
GROUP BY YEAR(datecol), MONTH(datecol);

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

答案 1 :(得分:2)

SELECT max(date_field) FROM date_table GROUP BY YEAR(date_field), MONTH(date_field) ORDER BY date_field ASC;

答案 2 :(得分:0)

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
    )