2011-06-22 107 views
-1
declare @userid int 
set @userid=9846 
SELECT TOP 10 
      tagid, 
      [Description] 
FROM tagsuggestion 
WHERE tagid IN (SELECT **DISTINCT** TOP 10 tagid 
      FROM (SELECT ulpt.tagid, 
          createddate 
        FROM userlocationposttag ulpt 
          WHERE [email protected]         

        UNION ALL 
        SELECT ult.tagid, 
          createddate 
        FROM userlocationtag ult 
          WHERE [email protected] 
        UNION ALL 
        SELECT upt.tagid, 
          createddate 
        FROM userprofiletag upt 
          WHERE [email protected] 
) T 

      ORDER BY createddate DESC) 

上記のクエリはエラーです。SELECT DISTINCTが指定されている場合、ORDER BY項目はSELECTリストに表示される必要があります。SELECT DISTINCTが指定されている場合は、ORDER BY項目が選択リストに表示されます。

.but私はDISTINCTを削除する場合は、このクエリは、私が明瞭性を確保したいと私はまた私の関連する記事の一つは

あるCreatedDateにDESC

によってソート順序を維持したい

を実行します

Last created 10 records from all of the 3 tables

+0

」ORDERは表示されません必要がありますSELECT DISTINCTが指定されている場合は選択リストにあります。 " - あなたが言ったように、** DISTINCT **を削除すると、このフレーズは適用されなくなります...(Yが指定されている場合はXが必要です。 Yを削除しました) –

+0

また、どのバージョンのSQL Server? –

+0

あなたの最初の質問はあなたの*実際の問題のために誤解を招いていましたか? – gbn

答えて

1

わかりましたので、我々はそれだけに基づいて、各タグ気には、最新の作成日ですので、我々はように、内側のクエリを構築することができます

SELECT tagid,MAX(createddate) as createddate FROM (
SELECT ulpt.tagid, 
     createddate 
FROM userlocationposttag ulpt 
WHERE [email protected]         
UNION ALL 
SELECT ult.tagid, 
     createddate 
FROM userlocationtag ult 
WHERE [email protected] 
UNION ALL 
SELECT upt.tagid, 
     createddate 
FROM userprofiletag upt 
WHERE [email protected] 
) t 
GROUP BY tagid 

そして、我々は別の副選択のそれをラップすることができ、および適用されますトップ10:

SELECT TOP 10 tagid FROM (
SELECT tagid,MAX(createddate) as createddate FROM (
SELECT ulpt.tagid, 
     createddate 
FROM userlocationposttag ulpt 
WHERE [email protected]         
UNION ALL 
SELECT ult.tagid, 
     createddate 
FROM userlocationtag ult 
WHERE [email protected] 
UNION ALL 
SELECT upt.tagid, 
     createddate 
FROM userprofiletag upt 
WHERE [email protected] 
) t 
GROUP BY tagid 
) t ORDER BY createddate desc 

そして(GROUP BYMAXはすでに各タグを一度だけ表示されていることを保証するので)私たちはもはや明確な必要項目BY

2

あなたは基本的には、そこにないフィールドで出力を並べ替えるようにクエリに指示しています。

createddateをselect文に入れるか、tagidでグループ化するか、[Description] AND createddateとorders by createddateのどちらかでなければなりません。

異なるcreateddateを含めるときに重複したタグIDと説明を取得する可能性がある場合は、別のクエリをラップし、その2つのフィールドだけでトップ10を区別します。

+0

+1すてきな言い回し – gbn

関連する問題