【发布时间】:2017-09-21 19:09:27
【问题描述】:
我有一个无法解决的 SQL (Teradata) 问题。我知道答案可能比我想象的要简单得多。
我有一组这样的代码:
ID timestamp location event_type
1111 20160601-0112 Detroit Event A
1111 20160602-0954 Brooklyn Event B
1111 20160602-1123 Brooklyn Event A
1112 20160912-1420 Minneapolis Event B
1113 20161123-1742 New Orleans Event A
1113 20161124-1841 New Orleans Event A
1113 20161124-2100 New Orleans Event B
1114 20170201-0959 Detroit Event A
1114 20170201-2350 Detroit Event A
以下是我需要退货的条件:
我想返回每个 ID 的第一个事件 B,以及在该事件 B 之前发生的最近的事件 A(基于时间戳)。因此,对于上面的数据集,我会得到:
ID timestamp location event_type
1111 20160601-0112 Detroit Event A
1111 20160602-0954 Brooklyn Event B
1113 20161124-1841 New Orleans Event A
1113 20161124-2100 New Orleans Event B
没有返回 1111 的第三条记录,因为它发生在事件 B 之后。没有返回 ID 1112,因为它前面没有事件 A。没有返回 1113 的第一条记录,因为它之后有更接近的事件 A(到事件 B)。 1114 没有被返回,因为没有事件 B。
我已经为此工作了几个小时,以至于我不再清楚地接近它......任何帮助将不胜感激!
【问题讨论】:
-
每个 ID 可能有 多个
Bs,然后您只想要第一个? -
理论上是的,但我可以查询数据并创建一个临时表,其中仅包含第一个事件 B 记录(以及所有事件 A 记录),如果它更容易的话。
-
为什么 ID 1112 不在列表中?是因为它缺少一个事件A吗?
-
没错。