【发布时间】:2014-11-14 02:04:20
【问题描述】:
我确定这是一个非常简单的 SQL 查询问题。这是我尝试使用时间戳列 (As_Of) 查询具有最后更新值的 ID 的表的模型
ID Value As_of
1173 156 20090601
1173 173 20081201
1173 307 20080901
1173 305 20080601
127 209 20090301
127 103 20081201
127 113 20080901
127 113 20080601
1271 166 20090201
1271 172 20081201
1271 170 20080901
1271 180 20080601
...
我的结果应该是这样的
ID Value As_of
1173 156 20090601
127 209 20090301
1271 166 20090201
我应该使用哪个选项来完成? SELF JOIN 还是 RANK()? 请就这两种方法的性能向我提出一些建议。哪个更快? 我听说 SELF JOIN 会降低查询的性能。
排名():
SELECT ID, Value, As_Of, RANK() OVER(PARTITION BY ID ORDER BY As_of DESC) 'RNK'
FROM Table
and by filtering using the column having RANK value 1
自加入:
SELECT ID, Value,As_of
from Table a inner join
(SELECT ID, MAX(As_of) as As_of
from Table group by ID) b
on a.ID=b.ID and a.As_of = b.As_of
【问题讨论】:
-
你考虑过基准测试吗?
标签: sql sql-server performance join