2017-01-17 3 views
2

本当にあなたの助けが必要です。私はいくつかの特定の順序でSQLテーブルからいくつかのデータを取得する必要があります。すべてのデータはKeyIDで降順で並べ替える必要がありますが、2番目の列に同じデータの行がいくつかある場合は、別の行で区切る必要があります。T-SQL ORDER BY 1つの列で別の列で混合する

たとえば、私たちはそのようなテーブルを持っている:それは

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

である必要があり、結果表で

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

はこれを作るための方法はありますか?

答えて

1

これは、あなたが探している正確にソートを生産するつもりはないが、それはkeyidsを広げなければならない:

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

これは私が必要とまさにはありませんが、それは最高の変種です – bimfh

0

これは、同じことを共有して最大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 
0

この次のクエリは、期待どおりの結果として正常に動作しています。ここで

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 

は私の出力です:enter image description here

関連する問題