因此,我应该创建一个基于巨大数据集中每个组的最后一行(33918340行)的视图,因此性能是关键问题。例如,从营业额表中获取每个银行帐户的最后营业额。我用的是
SELECT t1.*
FROM turnover t1 LEFT JOIN turnover t2
ON (t1.bankaccnumber = t2.bankaccnumber AND t1.id < t2.id)
WHERE t2.id IS NULL;
性能不是很好,我后来不得不添加与客户等相关的附加连接这只是一个例子)
有没有更好的方法(使用microsoft sql server 2014)?
2条答案
按热度按时间kqqjbcuj1#
使用
row_number()
或者rank()
:也就是说,相关子查询的性能通常稍好一些:
尤其是在有索引的情况下
turnover(bankaccnumber, id)
.ws51t4hk2#
您可以使用row\ u number()获取每个组的最后一行。像这样的。
在这里
row_number()over (partition by bankaccnumber order by id desc)
将为每个bankaccumber按id的降序创建一个从1开始的序列号。