我有两个数据表 -
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
任何人都可以指导我一个更好的方法(明智的性能/可读性)来实现这个目标吗?
P.S。上面的表只是为了呈现用例,我的实际表有数千条记录。
谢谢!
答案 0 :(得分:4)
我唯一能改变表现的方法是删除内部选择中的ORDER BY
和TOP 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
答案 1 :(得分: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
否则其他答案应该是您正在寻找的。 p>