【问题标题】:Highest value of the rank for a grouped data分组数据的最高排名值
【发布时间】:2021-09-14 19:13:20
【问题描述】:

从下面给出的数据(表:timeFramesDetail)

tfgroup City activeDTTM Begin_time End_time RankOfTime
2 16 2021-04-05 02:30:03.510 2021-04-04 18:00:00.000 2021-04-05 06:00:00.000 1
2 16 2021-04-05 02:30:04.510 2021-04-04 18:00:00.000 2021-04-05 06:00:00.000 2
3 16 2021-04-06 02:30:04.667 2021-04-05 18:00:00.000 2021-04-06 06:00:00.000 1
3 16 2021-04-06 02:30:05.433 2021-04-05 18:00:00.000 2021-04-06 06:00:00.000 2
3 16 2021-04-06 02:30:10.777 2021-04-05 18:00:00.000 2021-04-06 06:00:00.000 3
3 16 2021-04-06 02:30:11.667 2021-04-05 18:00:00.000 2021-04-06 06:00:00.000 4
4 16 2021-04-07 03:27:31.977 2021-04-06 18:00:00.000 2021-04-07 06:00:00.000 1
4 16 2021-04-07 03:27:59.523 2021-04-06 18:00:00.000 2021-04-07 06:00:00.000 2
4 16 2021-04-07 03:28:30.283 2021-04-06 18:00:00.000 2021-04-07 06:00:00.000 3
4 16 2021-04-07 03:28:31.257 2021-04-06 18:00:00.000 2021-04-07 06:00:00.000 4
4 16 2021-04-07 03:28:35.617 2021-04-06 18:00:00.000 2021-04-07 06:00:00.000 5
4 16 2021-04-07 03:28:54.837 2021-04-06 18:00:00.000 2021-04-07 06:00:00.000 6
4 16 2021-04-07 03:29:35.807 2021-04-06 18:00:00.000 2021-04-07 06:00:00.000 7
4 16 2021-04-07 03:30:34.793 2021-04-06 18:00:00.000 2021-04-07 06:00:00.000 8

如何找到所有 tf​​Groups 的最高价值排名? 结果应该如下:

tfgroup City activeDTTM Begin_time End_time RankOfTime
2 16 2021-04-05 02:30:04.510 2021-04-04 18:00:00.000 2021-04-05 06:00:00.000 2
3 16 2021-04-06 02:30:11.667 2021-04-05 18:00:00.000 2021-04-06 06:00:00.000 4
4 16 2021-04-07 03:30:34.793 2021-04-06 18:00:00.000 2021-04-07 06:00:00.000 8

以下是我尝试过的查询:

Select top 3 tfgroup  ,City, activeDTTM
From timeFramesDetail
Group by tfgroup  ,City, ActiveDTTM 

由于某种原因,这给了我前两个的准确结果,其余的都是错误的。 有人可以帮我更正查询吗?

【问题讨论】:

标签: sql sql-server tsql ranking-functions


【解决方案1】:

您可以使用window function 进行分区并选择所需的排名,如下所示:

select top (1) with ties * 
from timeFramesDetail
order by row_number() over (partition by tfgroup order by RankOfTime desc)

【讨论】:

  • 您好 Stu,此查询为我提供了所有 tf​​group 排名为 1 的输出。是否可以对其进行更改以提供所有 tf​​groups rankoftime 的最高“值”的输出?
  • 我不确定我是否遵循 - 你能详细说明吗,请参阅example fiddle。我没有同时使用所有列,因为解决方案只是为每个组的最高等级选择行。你能解释一下 Fiddle 有什么问题/缺少什么吗?
  • 你好斯图,我很抱歉!我看错了桌子。但这绝对是正确的,并且使输出完美无缺。非常感谢您的帮助! :)
  • TOP 1 WITH TIES ... ORDER BY ROW_NUMBER 需要额外的排序,请参阅dbfiddle.uk/…
  • 虽然这是不可避免的,但我会说它可以忽略不计;使用 100k 行进行测试,两个版本执行的逻辑读取是相同的。如果我在 SO 上标记每个答案,因为它不是所有可能的解决方案中绝对性能最好的,我现在没有代表;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-11
  • 1970-01-01
相关资源
最近更新 更多