0

我有一个包含以下信息的表:

mesID 是我的身份种子

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

现在请记住,我还有 60 多条消息,它们的 mesID 低于 98。我想要做的是只获取最后 5 条消息,但按照从最旧到最新消息返回的原始顺序(mesID = 1 显然是最老的)。

从逻辑上讲,我认为我只会获得前 5 名退货并通过 DESC 按 mesID 对其进行排序。然后在返回 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 回答