1

次のようなSQLクエリがあります。

SELECT Name, Text as Value, UpdateDate from A WHERE UserID = @userId
UNION 
SELECT Name, STR(Value), UpdateDate FROM B WHERE UserID = @userId

テーブルABその両方には、特定の名前の行がある場合とない場合があります。両方に名前がある場合、結果セットに最新の行のみを含める必要があります。

現在、私の結果セットは次のようになります。

Name | Value | UpdateDate
Foo    '23'    Jan-1-2012
Foo    'A'     Feb-7-2013
Bar    '42'    Jan-3-2011

そして、それを次のように要約したいと思います。

Name | Value
Foo    'A'
Bar    '42'

クライアントでこれをかなり簡単に実行できることはわかっていますが、何らかのGroup-By魔法を使用して単一のクエリで実行できるとしたら、本当に素晴らしいことです。うまくいけば、それも高すぎないでしょう。

4

1 に答える 1

4
WITH unionTB
AS
(
    SELECT Name, Text as Value, UpdateDate 
    from A WHERE UserID = @userId
    UNION 
    SELECT Name, STR(Value), UpdateDate 
    FROM B WHERE UserID = @userId
),
recordList
AS
(
    SELECT  Name, Value, UpdateDate,
            ROW_NUMBER() OVER (PARTITION BY Name
                                ORDER BY UpdateDate DESC) rn
    FROM    unionTB
)
SELECT  Name, Value, UpdateDate
FROM    recordList
WHERE   rn = 1
于 2013-03-07T16:59:03.820 に答える