如何在按列分组后逐步选择行?

时间:2015-12-03 02:18:01

标签: sql-server random group-by

说我有下表:

MyTable的

id | val | val2
---------------
1  | 'a' | 1.2
1  | 'b' | 2.3
1  | 'c' | 3.4
2  | 'b' | 4.5
2  | 'c' | 5.6
2  | 'b' | 6.7
2  | 'a' | 7.8
2  | 'd' | 8.9

我想要一个随机的查询,为每个唯一id返回一行。但结果不应该"分开" valval2之间的配对。所以

id | val | val2
---------------
1  | 'a' | 1.2
2  | 'b' | 4.5

是有效的结果,但

id | val | val2
---------------
1  | 'a' | 1.2
2  | 'b' | 5.6

不是。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您可以使用ROW_NUMBERNEWID()进行随机排序:

SELECT
    id, val1, val2
FROM (
    SELECT *,
        Rn = ROW_NUMBER() OVER(PARTITION BY id ORDER BY NEWID())
    FROM tbl
)t
WHERE Rn = 1