一个例子如下所示;想象一下每个逗号分隔日期是数据库中的一行
输入: - 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,因此可以使用这些日期函数。
干杯,
答案 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
)