1

次のようなデータを持つ2つのテーブルがあります-

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 の結果セットから最新のレコードを 2 つだけ取得したい-

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 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
于 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 に答える