2010-02-17 76 views
3

下面显示了一个示例;想象每个逗号分开的日期是数据库中的一行MySQL从日期列中获取每个月的最后日期

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

干杯,

回答

8
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; 
+0

这仍然会返回所有日期 – Tarski

+0

对不起,是啊,我刚刚更新了它 – vicatcu

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 
    ) 
相关问题