选择性聚合SQL;不是常规的分组方式
我的数据集看起来像这样。警报级别遵循以下优先级:选择性聚合SQL;不是常规的分组方式,sql,group-by,aggregation,Sql,Group By,Aggregation,我的数据集看起来像这样。警报级别遵循以下优先级: C > O > W 打开和关闭日期遵循警报级别优先级。 例如:警报级别“W”的关闭日期大于警报级别“O”的打开日期,将取C的打开日期的关闭日期。(我使用CTE完成了此部分)结果数据集如下所示。现在,挑战在于将两个连续的相同警报级别消除到只有一个级别,其中两个开放日期的最小值和两个关闭日期之间的最大值(读取前2个“W”) 数据集: ID axlenumber alertlevel closeReason Open
C > O > W
打开和关闭日期遵循警报级别优先级。
例如:警报级别“W”的关闭日期大于警报级别“O”的打开日期,将取C的打开日期的关闭日期。(我使用CTE完成了此部分)结果数据集如下所示。现在,挑战在于将两个连续的相同警报级别消除到只有一个级别,其中两个开放日期的最小值和两个关闭日期之间的最大值(读取前2个“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
提前感谢团队,
阿文请有人帮我编辑一下,让它看起来像一个数据集。我不能。谢谢,我很抱歉,您可以使用createtable…,insert-in…,使其看起来像一个数据集。。。声明。SqLFiddle将在这方面为您提供帮助。您的意思是前两行样本数据是“连续的”,在2009年1月27日关闭,在2009年1月22日打开,应该合并。所需的结果行包括10/15/08到1/27/09,而不是10/15/08到3/27/09,如果将这些行组合在一起,我会预期这些结果。我错过了什么?请阅读一些关于改进您的问题的提示。@HABO--这是我的打字错误:its 1/27/2009。对不起,好的。意思是“以任何方式重叠”?第五行和第六行是组合的,因为它们都是
alertlevel
“W”,并且恰好具有相同的日期。组合有一个closeReason
,它是两行值中最短的,即“修复”而不是“更高级别警报”,或者是否有其他选择依据?