値によってグループ化された値が変化しなかった行の間にDateDiff関数のためのクエリ

ライアン・イーウェン:

私はまた、「プログラム」、顧客が購入時にあった(いないことを格納する最善の方法が、それはそれが何であるかと私はそれに対処するために残されています)これを追跡し、請求書テーブルを照会するために探しています。

私は、各顧客がために、各プログラムにあった時間の長さを表示したいと思います。

例えば、ここでは顧客のカップルによって行われた購入の歴史です。私たちは、顧客が異なる日付で別のプログラムにあったことがわかります。プログラムIDは、実際には連続していないことに注意してください(多分、彼らは次のプログラムよりも高いIDを使用してプログラム上で開始)。

invoices table:

cust_id, prog_id, datetime
1,       1,       2020-01-01      < cust 1 first seen on program 1
2,       1,       2020-01-05      < cust 2 first seen on program 1
1,       1,       2020-02-07
1,       2,       2020-02-08      < cust 1 seen on program 2 after 38 days
2,       1,       2020-02-10
2,       2,       2020-02-15      < cust 2 seen on program 2 after 41 days
1,       2,       2020-02-15
2,       2,       2020-02-15
1,       2,       2020-02-22
1,       3,       2020-02-28      < cust 1 seen on program 3 after 20 days
2,       2,       2020-03-05
2,       2,       2020-03-07
2,       3,       2020-03-15      < cust 2 seen on program 3 after 29 days
2,       3,       2020-03-17

私は、この(私の頭の中で行われるので、うまくいけば、数学のチェックアウト)のようなものを見たいと思います:

cust_id, prg_id, days_on_prog
1,       1,      38
1,       2,      20
2,       1,      41
2,       2,      29
2,       3,      2

我々はプログラム3に彼らのためにdays_on_progを持っていないので、顧客1は、複数回のプログラム3で見られなかったことに注意してください。

あなたは私がそのようなクエリの構築を支援することはできますか?

GMB:

それは仕事をする必要がありアグリゲーションのようになります。

select
    cust_id,
    prg_id,
    datediff(max(datetime), min(datetime)) days_on_prog
from invoices
having max(datetime) <> min(datetime)
group by cust_id, prg_id
order by cust_id, prg_id

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=351397&siteId=1