【问题标题】:Creating Grouping from time windows in SQL Server (Group and Island)从 SQL Server 中的时间窗口创建分组(组和岛)
【发布时间】:2021-02-05 17:42:58
【问题描述】:

我有一张桌子,上面有每个代理的时间表。我需要将同一日程事件的时间从多个条目分组到同一块的单个条目。

例如,突出显示的 SupportAdmin 会话可以背靠背组合成一行。见下例:

第 9 行和第 10 行需要通过取最早的 startDt 和最晚的 EndDt 组合成一行。第 12、13、14 行同样如此。

导致:

我尝试过使用诸如 row_number()、RANK()、LAG、LEAD 等窗口函数,但这些函数都不能有效地处理这种困境。任何线索都会很棒。

谢谢。

编辑。此外,仅添加分组方法也不适合解决方案,因为分组将应用于整个列表,而不仅仅是“本地块”。

【问题讨论】:

  • 为什么不使用MIN(StartTime), MIN(StartDt), MAX(EndDt),然后按前三列分组?
  • @BJones 这不起作用,因为它会在列表中的所有类别中分组。因此,对于“管理员”,它将获取第一个管理员 startDt (06/01/2021 10:00:00) 和最后一个 EndDt(06/01/2021 14:40:00) - 这当然是不正确的

标签: sql-server time grouping window-functions rank


【解决方案1】:

使用分组方式

SELECT CID,STATE,[DESC],MIN(StartTime),MIN(StartDt),MAX(StartDt)
FROM TABLE 
GROUP BY CID,STATE,[DESC]

【讨论】:

  • 再次与上面的答案相同,这将在所有“管理员”中分组,无论他们在列表中的哪个位置。它看起来确实是一个简单的解决方案,但实际上要困难得多。
猜你喜欢
  • 2022-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
  • 1970-01-01
  • 2016-09-01
  • 2021-09-05
相关资源
最近更新 更多