我需要进行SQL查询才能从大表中查找一些条目。
表:
id value1 value2
ny 35732 8023
ny 732 23
ny 292 109
nj 8232 813
nj 241 720
nj 590 287
我需要随机从每个不同的ID群组中选择2个条目 uch
id value1 value2
ny 35732 8023
ny 292 109
nj 8232 813
nj 590 287
我的SQL代码:
select top 2 * from my_table group by id value1 value2
但是,这不是我想要的。
我还需要将结果插入表中。
任何帮助将不胜感激。
答案 0 :(得分:1)
您可以使用ROW_NUMBER
并使用NEWID()
生成随机ORDER
:
编辑:我将CHECKSUM(NEWID())
替换为NEWID()
,因为我无法证明哪个更快,NEWID()
是我认为最常用的。
WITH CTE AS(
SELECT *,
RN = ROW_NUMBER() OVER(PARTITION BY id ORDER BY NEWID())
FROM tbl
)
SELECT
id, value1, value2
FROM Cte
WHERE RN <= 2
小提琴应该在不同的跑步中显示不同的结果。
如果要将其插入另一个表,请使用此子查询版本:
INSERT INTO yourNewTable(id, value1, value2)
SELECT
id, value1, value2
FROM (
SELECT *,
RN = ROW_NUMBER() OVER(PARTITION BY id ORDER BY NEWID())
FROM tbl
)t
WHERE RN <= 2
答案 1 :(得分:1)
DECLARE @Table1 TABLE
(id varchar(2), value1 int, value2 int)
;
INSERT INTO @Table1
(id, value1, value2)
VALUES
('ny', 35732, 8023),
('ny', 732, 23),
('ny', 292, 109),
('nj', 8232, 813),
('nj', 241, 720),
('nj', 590, 287)
;
SELECT *
FROM @Table1 T
WHERE
(
SELECT COUNT(*)
FROM @Table1 TT
WHERE T.id = TT.id AND
T.value1 >= TT.value1
) <= 2
答案 2 :(得分:0)
微软就是这样:
SELECT TOP 10 PERCENT *
FROM Table1
ORDER BY NEWID()
有关更多示例,请参阅https://msdn.microsoft.com/en-us/library/Cc441928.aspx