2016-12-21 8 views
0

最初の訪問と2回目の訪問の日差を計算したい。 SQLを使用して顧客ごとに2回目の訪問と3回目の訪問などを行います。手伝ってください。SQLを使用して異なる訪問間の日付差を計算する方法

たとえば、顧客Aは 2016-01-03,2016-01-06および2016-05-30で3回訪問し、顧客Bは異なる日付で10回訪問しました。

クエリ

With cte as (Select customerid, VisitDate, 
        ROW_NUMBER() OVER(PARTITION BY CustomerID ORDER BY VisitDate) as rownum 
      FROM visitTable V) 
Select CustomerID, VisitDate, rownum, DateDiff(D,R1.VisitDate, R2.VisitDate) as NoOfDays 
FROM cte R1 
LEFT JOIN cte R2 ON R1.CustomerID = R2.CustomerID AND R1.rownum = 1 AND R2.rownum = 2 

私はあなたが正しい考えにかなり近かったと思うあなた

+3

DBMSとは何ですか? SQLサーバー? MySQL?オラクル?他に何か?また、あなたのテーブル構造は何ですか? [お手伝いをさせてください。](https://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/) – Siyual

+0

あなたの持っているものを教えてください試しました。 –

+0

あなたはお互いから日付を引くことができます - これは、(分数)日数になります。 – Randy

答えて

1

ありがとうございます。参加者は行番号を比較する必要があります。あなたの日付の順序を変更しましたが、私はそれをテストしませんでした。

With cte as (
     Select customerid, VisitDate, 
       ROW_NUMBER() OVER(PARTITION BY CustomerID ORDER BY VisitDate) as rownum 
     FROM visitTable V 
) 
Select R1.CustomerID, R1.VisitDate, R1.rownum, 
     DateDiff(D,R2.VisitDate, R1.VisitDate) as NoOfDays --this is days since last visit 
FROM cte R1 --current row 
LEFT JOIN cte R2 --previous visit - will result in null days for 1st row. 
     ON R1.CustomerID = R2.CustomerID 
     AND R1.rownum - 1 = R2.rownum 
order by R1.CustomerID, R1.VisitDate; 
関連する問題