比较行与条件

时间:2017-01-11 21:49:26

标签: sql compare rows

我正在寻找一种比较表中行的方法:

示例1

ID        StartDate     TerminationDate
1         01.01.2010    NULL
1         01.01.2011    NULL
1         05.01.2011    NULL        
1         01.01.2017    NULL     
2         01.01.2010   31.12.2010
2         01.01.2011   NULL
2         05.01.2011   NULL         
2         01.01.2017   NULL 
3         01.01.2010   31.12.2011
3         01.01.2011   31.12.2011
3         05.01.2011   NULL
3         01.01.2017   NULL 
4         01.01.2010   31.12.2011
4         01.01.2011   31.12.2011
4         05.01.2015   NULL
4         01.01.2017   NULL 

结果:

ID        StartDate     
1         01.01.2010  
2         01.01.2011
3         01.01.2010
4         05.01.2015

如果没有为ID提供TerminationDate,我想显示StartDate的最小值。在这种情况下,01.01.2010。

但是对于ID 2,给出了TerminationDate。在这种情况下,我需要检查,如果第二个StartDate> first TerminationDate(01.01.2011> 31.12.2010)。如果第二个StartDate>第一个TerminationDate和第二个TerminationDate是Null或>第三个StartDate,然后我要显示01.01.2011。否则我会以同样的方式检查下一个StartDate。

ID可以被视为合同的每一行的客户。只要至少有一个合同,我想要第一个StartDate。 ID 4将是2011年11月31日至2015年1月5日期间未签订合同的示例。因此,最小StartDate是05.01.2015。

我希望你能在我的问题背后得到这个想法。提前谢谢!

1 个答案:

答案 0 :(得分:0)

以下是使用GROUP BY和COALESCE的解决方案的前半部分。希望这足以让你开始。

        SELECT
            [id],
            [NewDate] = COALESCE(date1, MIN(date2))
        FROM
            TheTable
        GROUP BY
            [id]
        ORDER BY
            [id]