选择范围内仅发生一个值的记录

时间:2013-01-30 02:32:23

标签: sql

每周我都会从我的茄子农场向我的不同客户发送大量的茄子。顾客通常每周购买相同数量的茄子,但偶尔会有不同的数量。由于我拥有超过25,000,000个客户(大型农场),我想将他们的购买信息压缩到我正在处理的报告的更易于管理的表格中。这是我的源数据的样子 -

CustAcct -------------- PurchaseWeekEndDate ----- EggplantsPurchased

 123                  1/1/2012                    50

 123                  1/8/2012                    50

 123                  1/15/2012                   50

 123                  1/22/2012                   60

 123                  1/29/2012                   50

 123                  2/5/2012                    50

我希望新表中的数据看起来像这样 -

CustAcct ------- StartRangePWEnd Date ----- EndRangePWEndDate ------ EggplantsPurchased

 123            1/1/2012           1/15/2012                50

 123            1/22/2012          1/22/2012                60

 123            1/29/2012          2/5/2012                 50

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这是一个相当棘手的问题。要解决此问题,您需要识别相同的订单组。您可以使用相关子查询来执行此操作,以查找具有不同茄子数的每个客户的下一个日期。这可以作为组标识符。

一旦你有了,剩下的只是聚合:

select CustAcct, min(PurchaseWeekEndDate), max(PurchaseWeekEndDate), EggplantsPurchased
from (select t.*,
             (select min(PurchaseWeekEndDate)
              from t t2
              where t.CustAcct = t2.CustAcct and t.EggplantsPurchased <> t2.EggplantsPurchased and t2.PurchaseWeekEndDate > t.PurchaseWeekEndDate
             ) as nextDate
      from t
     ) t
group by CustAcct, nextDate, EggplantsPurchased

而且,由于世界上没有茄子农场拥有25,000,000名顾客,这个问题的真正本质是什么?