我们有一张表,其中包含订阅产品的状态更新。订阅开始时,表中会插入一条记录,并且订阅结束时该记录会更新为结束日期。我们的系统之一(不知道哪一个系统)有时会在“同一天下落\添加”结束订阅,然后再次开始(创建新记录)。因此,即使没有真正改变,相同的订户ID也会附加到多个记录。不包括同一天下降添加,同时保留真实的开始和结束日期
实例数据会是这样:
recID subID start end prodtype
1 19 01/11/2001 01/15/2001 A
2 19 01/15/2001 01/16/2001 A
3 19 01/16/2001 01/20/2001 A
4 19 01/30/2001 01/31/2001 A
这家伙开始在1/11和1/20上结束。记录2和3被系统放入(当天下降添加,但不是真的)。记录4是另一个订阅19先生晚些时候开始。
我有一些代码将尝试解析每个不同的订阅的第一个(真实的)记录,但它不能找到真正的结束日期,而不使用max()和用户分组。那当然会显示两个订阅,1/11 - 1/31和1/30 - 1/31,这是错误的。
我撕裂了我的头发试图解决这种模式下,以两个记录是这样的:
subID start end prodtype
19 01/11/2001 01/20/2001 A
19 01/30/2001 01/31/2001 A
这是Teradata的,但它只是ANSI SQL,我相信。
存在使用会产生预期的结果窗口集合函数以及所述一个正确下文标识的溶液。如果我有时间,我也会尽力写出来。 – 2012-02-13 15:01:41