0

データ内の顧客ごとの最大連続日数を見つけようとしています。特定の顧客が作成した最大日数を知りたいです。25/8/16 および 26/08/16 および 27/08/16 および 01/09/16 および 02/09/16 に誰かが私のアプリにアクセスした場合 - 最大シーケンスは 3 日 (25,26, 27)。

最後に (出力) 2 つのフィールドを取得したい: custid | custid | MaxDaySequence

データ テーブルに次のフィールドがあります。注文日(時間)

例: custid orderdate 1 25/08/2007 1 03/10/2007 1 13/10/2007 1 15/01/2008 1 16/03/2008 1 09/04/2008 2 18/09/2006 2 08/08/2007 2 28/11/2007 2 04/03/2008 3 27/11/2006 3 15/04/2007 3 13/05/2007 3 19/06/2007 3 22/09/2007 3 25/09/2007 3 28/01/2008

SQL Server 2014 を使用しています。

ありがとう

4

2 に答える 2

2

トリックがあります。日付で順序付けされた増分番号がある場合、日付からその日数を差し引いても、それらが連続している場合は同じになります。このように:

SELECT custid, 
       min(orderdate) as start_of_group,
       max(orderdate) as end_of_group,
       count(*) as num_days
FROM (
   SELECT custid, orderdate
          ROW_NUMBER() OVER (PARTITION  BY custid ORDER BY orderdate) as rn
) x
GROUP BY custid, dateadd(day, - rn, orderdate);

この結果を取得して、問題を解決するために最大日数を引き出すことができます。

SELECT custid, max(num_days) as longest
FROM (
  SELECT custid, 
         count(*) as num_days
  FROM (
     SELECT custid, orderdate
            ROW_NUMBER() OVER (PARTITION  BY custid ORDER BY orderdate) as rn
  ) x
  GROUP BY custid, dateadd(day, - rn, orderdate)
) y
GROUP BY custid
于 2016-11-10T21:47:00.743 に答える