我正在寻找一种比较表中行的方法:
示例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。
我希望你能在我的问题背后得到这个想法。提前谢谢!
答案 0 :(得分:0)
以下是使用GROUP BY和COALESCE的解决方案的前半部分。希望这足以让你开始。
SELECT
[id],
[NewDate] = COALESCE(date1, MIN(date2))
FROM
TheTable
GROUP BY
[id]
ORDER BY
[id]