【发布时间】:2019-12-03 12:59:11
【问题描述】:
我想从三个不同的表中查询日期,并将每个日期按时间顺序排列到列中。每个表 Event1、Event2 和 Event3 都包含按时间顺序对任何一个人发生的事件日期(即 Event1 应该在 Event2 之前发生,而 Event2 应该在 Event3 之前发生)。但碰巧一个人的 Event1 日期在 Event2 和 Event3 之后。我想得到一个显示两行的结果集。第一行显示来自 Event2 和 Event3 的较早事件,第二行仅包含来自 Event1 的较新事件日期。下面是这个例子的数据:
主要
ID
----------
Person001
Person002
Person003
Person004
Person005
事件1
ID | EVENT_DATE
----------+-----------
Person001 | 2019-04-30
Person002 | 2018-02-01
Person004 | 2018-05-01
事件2
ID | EVENT_DATE
----------+-----------
Person001 | 2005-03-03
Person002 | 2018-03-15
Person003 | 2017-10-10
Person005 | 2018-10-01
事件3
ID | EVENT_DATE
----------+-----------
Person001 | 2005-04-15
Person002 | 2019-01-10
Person004 | 2018-12-11
Person005 | 2018-12-15
Person005 | 2019-07-02
我希望结果集如下所示:
ID | EVENT_DATE_1 | EVENT_DATE_2 | EVENT_DATE_3
----------+--------------+--------------+--------------
Person001 | NULL | 2005-03-03 | 2005-04-15
Person001 | 2019-04-30 | NULL | NULL
Person002 | 2018-02-01 | 2018-03-15 | 2019-01-10
Person003 | NULL | 2017-10-10 | NULL
Person004 | 2018-05-01 | NULL | 2018-12-11
Person005 | NULL | 2018-10-01 | 2018-12-15
Person005 | NULL | NULL | 2019-07-02
我正在使用 Microsoft SQL Server。
提前致谢。
我应该澄清一下:Person001 只是一个示例个人。我想查询整个数据库。对于大多数人来说,事件将按照正确的顺序发生。但是,有些人会有多个事件实例。例如,某人可以有两个 Event1 日期。对于示例中的 Person001,他们应该有一个对应于 Event2 和 Event3 的 Event1 日期;只是碰巧缺少数据。
编辑:我添加了更多示例数据。我尝试了答案中的代码,它似乎仅适用于 Person001 的情况。如果数据点有其他排列,它似乎不起作用。我希望额外的人会考虑其他类型的场景。
【问题讨论】:
标签: sql-server tsql