2010-02-17 176 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 
    ) 
相關問題