我最初写的如下:
SELECT t1.TransactionNumber
FROM t1
JOIN
(
SELECT MAX(id) id
FROM t1
WHERE Period BETWEEN '01-11-2013' and '01-12-2014'
GROUP BY AccountNumber
) t2
on t1.id= t2.id
但是速度太慢了。它需要大约20秒的时间,因此我进行了以下更改作为测试
SELECT MAX(id) AS id
INTO #t2
FROM t1
WHERE Period BETWEEN '01-11-2013' and '01-12-2014'
GROUP BY AccountNumber
SELECT t1.id
FROM t1
JOIN #t2 t2
ON t1.id= t2.id
第二个查询只花费了1秒钟的时间。第二个查询使用PK键进行索引查找,而第一个查询则进行扫描。
注意:id是t1表上聚集的主键。
t1
的主键列上进行自连接,还是涉及到其他表? - Mikael Eriksson