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
这是我的输出:
我真的需要你的帮助。我必须通过一些特定的顺序从 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
这是我的输出: