1

我有两个数据表 -

TestTable1                          TestTable2  
----------                          ----------  
Id  Name        DealDate            Id  Name        DealDate  
1   aaTable     2010-09-22          1   aaTable2    2010-09-23  
2   bbTable     2010-09-23          2   bbTable2    2010-09-24  
3   ccTable     2010-09-28          3   ccTable2    2010-09-26  
4   ddTable     2010-09-25          4   ddTable2    2010-09-27  

我只想从 TestTable1 + TestTable2 的结果集中获得 两条最新记录来返回这个 -

Id  Name        DealDate
4   ccTable     2010-09-28 
3   ddTable2    2010-09-27 

这是我当前的查询

SELECT TOP 2 * FROM 
(
    SELECT * FROM
    (SELECT TOP 2 Id, Name, DealDate FROM TestTable1 ORDER BY DealDate DESC) T1
    UNION ALL 
    SELECT * FROM
    (SELECT TOP 2 Id, Name, DealDate FROM TestTable2 ORDER BY DealDate DESC) T2
) T1T2
ORDER BY DealDate DESC

谁能指导我以更好的方式(性能方面/可读性方面)来实现这一目标?

PS 上面的表格只是为了展示用例,我的实际表格有数千条记录。

谢谢!

4

2 回答 2

4

我唯一会改变性能的方法是删除内部选择中的ORDER BYTOP 2- 它们毫无意义。
除此之外,您的解决方案就是要走的路。在您使用时不应该有任何性能问题,UNION ALL而不是UNION......

SELECT TOP 2 * FROM 
(
    SELECT Id, Name, DealDate FROM TestTable1
    UNION ALL 
    SELECT Id, Name, DealDate FROM TestTable2
) T1T2
ORDER BY DealDate DESC
于 2012-09-03T10:37:45.093 回答
0

如果您一直想从 TestTable1 获得 1 条记录,从 TestTable2 获得 1 条记录,那么您可以尝试:

SELECT TOP 1 * FROM TestTable1 ORDER BY DealDate DESC
UNION ALL
SELECT TOP 1 * FROM TestTable2 ORDER BY DealDate DESC

否则,其他答案应该是您正在寻找的。

于 2012-09-03T10:41:41.507 回答