如何在SQL查询中合并基于事件的行?

时间:2018-12-14 00:13:58

标签: sql-server

我有一个带有以下字段的简单SQL表:

  • 事件开始(日期时间)
  • 事件结束(日期时间)
  • 事件描述(varchar)

里面的数据代表一个连续的时间轴,分为不同类型的事件。每个[Event End]都将匹配一个[Event Start]字段(如一条链)。

我在这里面临的挑战是,某些事件是相同的,请参见以下示例:

Event Start        Event End          Event Description
1/1/2018 07:00:00  1/1/2018 07:30:00  Breakfast
1/1/2018 07:30:00  1/1/2018 07:40:00  Drive To Work
1/1/2018 07:40:00  1/1/2018 07:55:00  Drive To Work
1/1/2018 07:55:00  1/1/2018 12:00:00  Working

但是我想要一个可以显示如下视图的SQL查询:

Event Start        Event End          Event Description
1/1/2018 07:00:00  1/1/2018 07:30:00  Breakfast
1/1/2018 07:30:00  1/1/2018 07:55:00  Drive To Work
1/1/2018 07:55:00  1/1/2018 12:00:00  Working

在我的表中,我可以有两个以上的事件需要合并到单个行中,以防万一您想知道我们是否只能执行简单的JOIN并解决该问题,可能需要应用递归方法,但是我不知该如何。您知道如何构建SQL查询吗?

1 个答案:

答案 0 :(得分:1)

您可以这样做:

select
      "Event Description"
    , min("Event Start") as "Event Start"
    , max("Event End") as "Event End"
from that_table
group by
      "Event Description"

仅依靠描述可能是一个重大问题,例如拼写错误或偶然的多个空格可能会导致您意想不到的差异-或重复描述可能会看到任务“加入”不应加入。