我在 MS SQL 中的表如下所示:
CLIENT | CONTACT_DATE | WAY_CONTACT
-------------------------------------
123 | 2021-01-01 | phone
123 | 2021-01-10 | phone !
123 | 2021-01-11 | phone !
123 | 2021-04-05 | mail !
123 | 2021-04-06 | mail !
555 | 2021-11-02 | mail !
555 | 2021-11-03 | mail !
555 | 2021-11-05 | phone
經過 ”!” 我簽署了通過way_contact 與特定客戶聯系的次數甚至超過 5 天的時刻。
而且我想計算特定情況下 CONTACT_DATE 比每 5 天更頻繁的情況有多少次,因此我需要以下內容:
WAY_CONTACT | CONTACT_MORE_OFTEN_THAN_EVERY_5_DAYS
------------------------------------------------------
phone | 1
mail | 2
uj5u.com熱心網友回復:
像這樣:
select
q.way_contact,
sum(q.p)
from
(select
t.way_contact,
case
when datediff("d",
lag(t.contact_date) over (partition by t.client, t.way_contact
order by t.client, t.way_contact, t.contact_date),
t.contact_date) <= 5
then 1 else 0
end as p
from
tblContact as t) as q
group by
q.way_contact
order by
q.way_contact

uj5u.com熱心網友回復:
這是在 5 天內使用計算排名的解決方案。
SELECT WAY_CONTACT , SUM(CEILING(1.0*Days/5)) AS CONTACT_MORE_OFTEN_THAN_EVERY_5_DAYS FROM ( SELECT CLIENT, WAY_CONTACT, Rnk , DATEDIFF(day, MIN(CONTACT_DATE), MAX(CONTACT_DATE)) AS Days FROM ( SELECT * , [Rnk] = SUM(flag) OVER (PARTITION BY CLIENT, WAY_CONTACT ORDER BY CONTACT_DATE) FROM ( SELECT * , [flag] = IIF(5 >= DATEDIFF(day, LAG(CONTACT_DATE) OVER (PARTITION BY CLIENT, WAY_CONTACT ORDER BY CONTACT_DATE), CONTACT_DATE), 0, 1) FROM CLIENT_COMMUNICATIONS ) q1 ) q2 GROUP BY CLIENT, WAY_CONTACT, Rnk HAVING MIN(CONTACT_DATE) < MAX(CONTACT_DATE) ) q3 GROUP BY WAY_CONTACT ORDER BY WAY_CONTACT;
| WAY_CONTACT | CONTACT_MORE_OFTEN_THAN_EVERY_5_DAYS |
|---|---|
| 郵件 | 2 |
| 電話 | 1 |
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/416743.html
標籤:
下一篇:添加更多ID時SQL查詢速度變慢
