T-SQL ORDER BY 一列与另一列混合

T-SQL ORDER BY one column with mixing by another

我真的需要你的帮助。我必须通过一些特定的顺序从 SQL table 获取一些数据。所有数据应按 KeyID 降序排列,但如果第二列中有一定数量的行具有相同的数据,则它们必须由另一行分隔。

比如我们有这样的table:

KeyID    UserID
1         15
2         17
3         19
4         19
5         15
6         17
7         17

结果table应该是

KeyID    UserID
7         17
5         15
6         17
4         19
2         17
3         19
1         15

有什么办法可以做到吗?

这不会产生您正在寻找的那种类型,但它应该展开 keyids:

order by row_number() over (partition by userId order by keyid desc),
         keyid desc

这应该适用于最多有 2 个连续记录共享相同的简单情况 UserID:

SELECT KeyID, UserID
FROM (
   SELECT KeyID, UserID,
          rn, COUNT(*) OVER (PARTITION BY UserID, grp ORDER BY KeyID DESC) AS rnk
   FROM (
      SELECT KeyID, UserID,
             ROW_NUMBER() OVER (ORDER BY KeyID DESC) AS rn,
             ROW_NUMBER() OVER (ORDER BY KeyID DESC) - 
             ROW_NUMBER() OVER (PARTITION BY UserID 
                                ORDER BY KeyID DESC) AS grp
      FROM mytable) AS t) AS x
ORDER BY rn + rnk, KeyID 

下面的查询工作正常,符合您的预期结果。

WITH TEMP AS(
SELECT  *,
        ROW_NUMBER() OVER(PARTITION BY USERID ORDER BY KEYID DESC)ROW,
        ROW_NUMBER()OVER(ORDER BY KEYID DESC)ROW1 
FROM    USERS
        )

SELECT  KEYID,USERID 
FROM    (
        SELECT KEYID,USERID,ROW1,ROW FROM TEMP
        WHERE ROW<>2
        UNION 
        SELECT KEYID,USERID,ROW1+1 ROW1, ROW FROM TEMP
        WHERE ROW=2
        )B
ORDER BY ROW1 ASC

这是我的输出: