これは私が毎日の読者ですが、これは私の最初の投稿です。 :)時差のある再帰的クエリ
3日以内に私と一緒に仕事をしてくれるクライアントを示すMS SQL Server 2014レポートを作成する必要があります。私は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( Tから last_donedealdateとして ユーザによって(パーティション、日付による製品オーダー)にわたって)を「支払った」日付端を*、 MAX(ケースアクション=「donedeal」Tを選択し、タイプ=)から ここaction = 'new'およびtype = 'ordered'日付< DATEADD(日、3、last_donedealdate)
UNION ALL
選択トン。* からは(トンを選択します。*、 最大アクション= 'donedeal' とタイプ=が '注文'(ケース、日付 トンから last_donedealdateなど、ユーザ、日付による製品のオーダー)による終了) 以上(パーティション)トン アクション= '新しい' とタイプ= '支払わ' 日付< DATEADD(日、3、last_donedealdate)
自己内部結合は1つの方法です。何を試しましたか? (そうでなければ、GROUP BYを試すことができます) – jarlh
@jarlh各行をそれぞれの行と条件(型、日付、アクション)に一致するものと比較する必要があるので、内部結合ヘルプですか? 私はGroupByを試して、MIN(日付)とMAX(日付)を比較しましたが、それは2つの結果の間でのみ比較することを意味します。各行に1つ以上の一致がある場合があります。 – ct14