从每个月给出的最新日期中提取数据

时间:2015-11-24 15:18:34

标签: sql sql-server

我的目标是从我的数据库中提取所有不在月末的记录,但是在数据中每个月存在的最后一个日期(尽管其中一些可能恰好是结束)这个月)。

目前,只需简单地获取每个月的最新日期,仅使用以下代码需要26分钟:

SELECT Max(DATE)
FROM Accounts
GROUP BY Year(Date), Month(Date);

关于我们拥有的16M行,在temp_table中将其作为FROM语句的子查询运行,这不是我们所寻求的速度改进(目前在整个表中读取大约需要40分钟)反正)。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

一种方法是使用窗口函数:

select a.*
from (select a.*,
             rank() over (partition by year(date), month(date)
                          order by day(date) desc) as seqnum
      from accounts a
     ) a
where seqnum = 1;

注意:使用rank()(或等效dense_rank())将返回每个月最后一天的所有行。如果您只想要一条记录,则可以使用row_number()代替。