选择顶部2个不同的每个ID和日期
问题描述:
我有这样的一个表:选择顶部2个不同的每个ID和日期
表1:
[Id] [TDate] [Score]
1 1.1.00 50
1 1.1.00 60
2 1.1.01 50
2 1.1.01 70
2 1.3.01 40
3 1.1.00 80
3 1.1.00 30
3 1.2.00 40
我的期望输出应该是这样的:
[ID] [TDate] [Score]
1 1.1.00 60
2 1.1.01 70
2 1.3.01 40
3 1.1.00 80
3 1.2.00 40
所以票价,我写了这个:
SELECT DISTINCT TOP 2 Id, TDate, Score
FROM
( SELECT Id, TDate, Score, ROW_NUMBER() over(partition by TDate order by Score) Od
FROM Table1
) A
WHERE A.Od = 1
ORDER BY Score
但它g艾夫斯我:
[ID] [TDate] [Score]
2 1.1.01 70
3 1.1.00 80
我当然可以这样做:
"select top 2 ...where ID = 1"
然后:
union
`"Select top 2 ... where ID = 2"`
等。 但我有这10万..
任何方式将其推广到任何身份证? 谢谢。
答
你的输出没有意义。让我假设你想每个ID两行。那么查询将如下所示:
SELECT TOP 2 Id, TDate, Score
FROM (SELECT Id, TDate, Score,
ROW_NUMBER() over (partition by id order by Score DESC) as seqnum
FROM Table1
) t
WHERE seqnum <= 2
ORDER BY Score;
注:
- 这是假设你想每
id
两行。因此,id
在PARTITION BY
中。 - 的
WHERE
现在选择每组两行中PARTITION BY
。 - 有外部查询不需要
SELECT DISTINCT
- 至少对于这个问题。
答
WITH TOPTWO AS (
SELECT Id, TDate, Score, ROW_NUMBER()
over (
PARTITION BY TDate
order by SCORE
) AS RowNo
FROM [table_name]
)
SELECT * FROM TOPTWO WHERE RowNo <= 2
答
除非我失去了一些东西这可以用一个简单的组由
首先要做我准备一个临时表来进行测试:
declare @table table (ID int, TDate varchar(10), Score int)
insert into @Table values(1, '1.1.00', 50)
insert into @Table values(1, '1.1.00', 60)
insert into @Table values(2, '1.1.01', 50)
insert into @Table values(2, '1.1.01', 70)
insert into @Table values(2, '1.3.01', 40)
insert into @Table values(3, '1.1.00', 80)
insert into @Table values(3, '1.1.00', 30)
insert into @Table values(3, '1.2.00', 40)
现在,让我们做一个选择在这表
select ID, TDate, max(Score) as Score
from @table
group by ID, TDate
order by ID, TDate
结果是这样的:
ID TDate Score
1 1.1.00 60
2 1.1.01 70
2 1.3.01 40
3 1.1.00 80
3 1.2.00 40
因此,所有你需要做的是改变@table你的表名和你做
答
试试这个:通过ID和TDate使分区和排序分数降序排列
ROW_NUMBER() over(partition by ID,TDate order by Score DESC) Od
完整脚本
WITH CTE AS(
SELECT *,
ROW_NUMBER() over(partition by ID,TDate order by Score DESC) RN
FROM TableName
)
SELECT *
FROM CTE
WHERE RN = 1
我不明白输出。为什么不是两行id = 1? –
我想他想要每个ID和TDate组合的最大(分数) – GuidoG