0

次の情報を含むテーブルがあります。

mesID は私の ID シードです

mesID | ToUser | FromUser | DateTime
-------------------------------------
91    | jason  | krissy   | 1/18/2013 12:10:23 PM
92    | jason  | krissy   | 1/18/2013 12:20:38 PM
93    | jason  | krissy   | 1/18/2013 12:35:14 PM
94    | jason  | krissy   | 1/18/2013 12:20:38 PM
95    | jason  | krissy   | 1/18/2013 12:35:14 PM
98    | jason  | krissy   | 1/18/2013 12:10:23 PM
101   | jason  | krissy   | 1/18/2013 12:20:38 PM
104   | jason  | krissy   | 1/18/2013 12:35:14 PM
109   | jason  | krissy   | 1/18/2013 12:54:11 PM

ここで、mesID が 98 よりも小さいメッセージが 60 件以上あることを覚えておいてください。私がやりたいのは、最後の 5 つのメッセージだけを取得することですが、返された最も古いメッセージから最も新しいメッセージへの元の順序でそれらを保持します (mesID = 1 は明らかに最も古い)。

論理的には、上位 5 つの返品を取得し、mesID と DESC で並べ替えるだけだと思います。次に、5つが返された後、mesID AESCでそれらを再注文しますが、これを行う方法がわかりません。

したがって、最終結果は次のようになります...

95    | jason  | krissy   | 1/18/2013 12:35:14 PM
98    | jason  | krissy   | 1/18/2013 12:10:23 PM
101   | jason  | krissy   | 1/18/2013 12:20:38 PM
104   | jason  | krissy   | 1/18/2013 12:35:14 PM
109   | jason  | krissy   | 1/18/2013 12:54:11 PM
4

3 に答える 3

3

サブクエリを実行します。

SELECT *
FROM   TABLE
WHERE  mesid IN (SELECT TOP 5 mesid
                 FROM   TABLE
                 WHERE ToUser like '%krissy%' or FromUser like '%krissy%'  
                 ORDER BY
                        mesid DESC)
ORDER BY
       mesid ASC
于 2013-02-02T11:35:46.430 に答える
3
SELECT *
FROM   (
           SELECT TOP 5 *
           FROM   TABLE
           ORDER BY
                  mesID DESC
       ) t
ORDER BY
       t.mesID
于 2013-02-02T11:37:05.137 に答える
1

toUSer と FromUser を含む多くのレコードがユーザーごとにあると仮定すると、これは最新の 5 を取得します。

WITH recordList
AS
(
    SELECT mesID, ToUSer, FromUser, DateTime,
            ROW_NUMBER() OVER (PARTITION BY ToUSer, FromUser
                                ORDER BY mesID DESC) rn
    FROM tableName
)
SELECT mesID, ToUSer, FromUser, DateTime
FROM recordList
WHERE rn <= 5
ORDER BY mesID
于 2013-02-02T11:36:10.520 に答える