我的目标是从我的数据库中提取所有不在月末的记录,但是在数据中每个月存在的最后一个日期(尽管其中一些可能恰好是结束)这个月)。
目前,只需简单地获取每个月的最新日期,仅使用以下代码需要26分钟:
SELECT Max(DATE)
FROM Accounts
GROUP BY Year(Date), Month(Date);
关于我们拥有的16M行,在temp_table中将其作为FROM语句的子查询运行,这不是我们所寻求的速度改进(目前在整个表中读取大约需要40分钟)反正)。
有什么建议吗?
答案 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()
代替。