這是我的第一篇文章,儘管我是日常讀者。 :)帶時差的遞歸查詢
我需要生成一份MS SQL Server 2014報告,顯示在少於或等於3天內回來與我做生意的客戶。我嘗試了INNER JOINS,但我沒有成功。
我想到了解決的方法是使用下面的邏輯:
If product is same
and if userId is same
and if action was donedeal but now is new
and if date diff <= 3 days
and if type is NOT same
then show results
如我的數據:
id orderId userId type product date action
1 1001 654 ordered apple 01/05/2016 new
2 1002 889 ordered peach 01/05/2016 new
3 1001 654 paid apple 01/05/2016 donedeal
4 1002 889 paid peach 03/05/2016 donedeal
5 1003 654 ordered apple 03/05/2016 new
6 1004 889 ordered peach 04/05/2016 new
7 1005 122 ordered apple 04/05/2016 new
8 1006 978 ordered peach 04/05/2016 new
9 1005 122 paid apple 04/05/2016 donedeal
10 1007 122 ordered apple 10/05/2016 new
期望的結果:
id orderId userId type product date Diff
3 1001 654 paid apple 01/05/2016 2 days
4 1002 889 paid peach 03/05/2016 1 day
5 1003 654 ordered apple 03/05/2016 2 days
6 1004 889 ordered peach 04/05/2016 1 day
能否請您直接我的功能可以幫助我解決這個問題?
在此先感謝。
#更新
戈登·利諾夫給我的建議下面的代碼,但由於類型必須是不同的我複製的代碼並運行它按以下和它的工作:
選擇T * 從(選擇噸。*, 最大時動作=「donedeal」和類型=「付費」,那麼日期端(殼體)上 (由用戶從噸 分區,按日期產物順序)last_donedealdate )噸 其中action ='new'和type ='ordered'日期< DATEADD(天,3,last_donedealdate)
UNION ALL
選擇噸。* 從(選擇噸。*, MAX(情況下,當動作= 'donedeal' 和類型= '有序' 然後日期端)上 (由用戶分區,按日期產物順序)last_donedealdate 從噸 )噸 其中action = '新' 和類型= '付費' 日期< DATEADD(天,3,last_donedealdate)
自我內部聯接是一種方法。你嘗試了什麼? (否則你可以嘗試GROUP BY。) – jarlh
@jarlh內部聯接是否有幫助,因爲每一行都需要與其他行和符合條件的類型(類型,datediff,action)進行比較? 我試過GroupBy並比較了MIN(日期)和MAX(日期),但這意味着它只會比較2個結果。有些情況下每行有超過1個匹配。 – ct14