4

私はこのテーブルを持っています:

Reply_ID | Fk_Post_ID
   10    |    5
   9     |    6
   8     |    5
   7     |    9
   6     |    5
   5     |    9
   4     |    7

次の順序パターンでレコードを取得するクエリが必要です。最高の reply_ID を持つレコードを検索し、同じ Fk_Post_ID を持つすべてのレコードを取得します。このようなもの:

Reply_ID | Fk_Post_ID
   10    |    5
   8     |    5
   6     |    5
   9     |    6
   7     |    9
   5     |    9
   4     |    7
4

3 に答える 3

5
CREATE TABLE #YourTable (
    Reply_ID INT,
    fk_Post_ID INT
)

INSERT INTO #YourTable VALUES (10, 5)
INSERT INTO #YourTable VALUES (9, 6)
INSERT INTO #YourTable VALUES (8, 5)
INSERT INTO #YourTable VALUES (7, 9)
INSERT INTO #YourTable VALUES (6, 5)


SELECT
    t1.Reply_ID, 
    t1.fk_Post_ID
FROM
    #YourTable t1 JOIN (
    SELECT 
        MAX(Reply_ID) AS Max_Reply_ID,
        fk_Post_ID
    FROM #YourTable
    GROUP BY fk_Post_ID
) t2 ON t2.fk_Post_ID = t1.fk_Post_ID
ORDER BY 
    t2.Max_Reply_ID DESC, 
    t1.Reply_ID DESC

ここでSQLフィドル

于 2012-10-22T20:01:11.867 に答える
2

あなたのDBMSがウィンドウ関数を持っているなら、これはそれも解決します:

Select
  Reply_ID,
  FK_Post_ID
From 
  yourTable a
Order By 
  Max(Reply_ID) Over (Partition By FK_Post_ID) Desc,
  Reply_ID Desc

http://sqlfiddle.com/#!3/4be0c/9/0

于 2012-10-22T20:28:29.943 に答える
2

CASEで aを使用できますORDER BY

....
ORDER BY CASE WHEN Fk_Post_ID=(
                   SELECT MIN(Fk_Post_ID)
                   FROM dbo.Table
                   WHERE Reply_ID=(SELECT MAX(Reply_ID)FROM dbo.Table)
               ) THEN 0 ELSE 1 END ASC
,  Reply_ID DESC
,  Fk_Post_ID ASC

これがフィドルです:http://sqlfiddle.com/#!3/45f20/7/0

于 2012-10-22T19:58:34.093 に答える