选择性聚合SQL;不是常规的分组依据

时间:2018-06-26 15:45:48

标签: sql group-by aggregation

我的数据集如下所示。警报级别具有优先级:

C > O > W

打开和关闭日期遵循警报级别的优先级。 例如:警报级别'W'的关闭日期大于警报级别'O'的打开日期,将采用C的打开日期的关闭日期。(我使用CTE进行了此操作)结果数据集为如下。现在,面临的挑战是将两个连续的相同警报级别消除为仅一个,同时将两个打开日期中的最小值和两个关闭日期中的两个最大关闭日期(请先读取两个“ W”)

数据集:

ID  axlenumber  alertlevel  closeReason         OpenDate        closeddate
100 1           W           HIGHER_LEVEL_ALERT  10/15/2008 0:00 1/27/2009 0:00
100 1           W           HIGHER_LEVEL_ALERT  1/22/2009 0:00  1/27/2009 0:00
100 1           O           REPAIR              1/27/2009 0:00  3/27/2009 0:00
100 1           C           REPAIR              1/27/2009 0:00  3/27/2009 0:00
100 1           W           HIGHER_LEVEL_ALERT  5/27/2012 0:00  8/18/2012 0:00
100 1           W           REPAIR              5/27/2012 0:00  8/18/2012 0:00
100 1           C           REPAIR              5/27/2012 0:00  8/18/2012 0:00
100 1           W           HIGHER_LEVEL_ALERT  6/22/2016 0:00  7/21/2017 0:00
100 1           O           HIGHER_LEVEL_ALERT  7/2/2017  0:00  11/15/2017 0:00
100 1           C           REPAIR              7/21/2017 0:00  11/15/2017 0:00

我所需的数据集应类似于:

ID  axlenumber  alertlevel  closeReason         OpenDate        closeddate
100 1           W           HIGHER_LEVEL_ALERT  10/15/2008 0:00 1/27/2009 0:00

100 1           O           REPAIR              1/27/2009 0:00  1/27/2009 0:00
100 1           C           REPAIR              1/27/2009 0:00  3/27/2009 0:00

100 1           W           REPAIR              5/27/2012 0:00  5/27/2012 0:00
100 1           C           REPAIR              5/27/2012 0:00  8/18/2012 0:00
100 1           W           HIGHER_LEVEL_ALERT  6/22/2016 0:00  7/2/2017 0:00
100 1           O           HIGHER_LEVEL_ALERT  7/2/2017  0:00  7/21/2017 0:00
100 1           C           REPAIR              7/21/2017 0:00  11/15/2017 0:00

感谢前进队, 阿文

0 个答案:

没有答案
相关问题