Teradata SQL:比较组内的值

Teradata SQL: Compare values inside group

我最近 运行 遇到了一个问题,似乎无法使用 SQL(或其他方式)找到很好的解决方案。我有一个 table 如下所示

uid | event | start_date | end_date
 1      A     23/07/2014    NULL
 1      B     25/07/2014    NULL
 1      C     26/08/2014    NULL
 1      A        NULL      25/07/2014
 2      A     23/07/2014    NULL
 2      C     19/09/2014    NULL
 2      B     13/10/2014    NULL
 2      A        NULL      25/10/2014
 2      B     12/09/2014    NULL

对于每个用户(由唯一的用户 ID uid 给出),如果使用 start_date小于等于end_date。对于上面的示例,我们将得到结果 table as

uid | event | start_date | end_date   | triggered
 1      A     23/07/2014    NULL            1
 1      B     25/07/2014    NULL            0
 1      C     26/08/2014    NULL            0
 1      A        NULL      25/07/2014       1
 2      A     28/11/2014    NULL            0
 2      C     19/09/2014    NULL            0    
 2      B     13/10/2014    NULL            1
 2      A        NULL      25/10/2014       0 
 2      B        NULL      15/11/2014       1

因为对于用户 1,事件 A 有一个 start_date <= end_date,所以该事件对应的 triggered 值将是 1。与用户 2 相同,其中事件 B 由给定条件触发。我想出了一个解决方案,需要自我加入 table 但我希望以更好的方式做到这一点,同时学习一些新技术。任何帮助或提示将不胜感激。

我认为您可以使用 window 函数做您想做的事。如果我理解逻辑:

select t.*,
       (case when min(start_date) over (partition by uid, event) <
                  max(end_date) over (partition by uid, event)
             then 1 else 0
        end) as triggered
from table t;