2016-03-02 67 views
0

我正在使用SQL Workbench。基於timediff的SQL計數和包含字符串的列

cust_num date notes 
1234 2016-02-01 advice 
1234  2016-02-01 something else 
1234 2016-02-02 order 
1234 2016-02-03 order 
4421 2016-02-15 advice 
4421 2016-02-17 order 
4421 2016-02-18 something else 
4421 2016-02-24 order 

我知道上面有點不清楚,但基本上,上表中有3列。一個顯示customer_num(客戶號碼),一個顯示日期,另一個顯示註釋字段。 從上面,我想執行兩個查詢。我對此很新奇,所以我希望這很清楚。我正在使用SQL工作臺。

i)我想統計在收到建議後4天內發出訂單的DISTINCT'customer_num的數量。

所以基於上表的答案應該是3.這是因爲cust_num'1234'在4天內做了兩個訂單而cust_num'4421'做了1個訂單。因此,總計3

ii)我想要統計在收到建議後15天內發出訂單的DISTINCT customer_num的數量。只有規定是我不想重新計算(i)在4天內下單的人。我想排除他們。

所以這個答案是1. Customer_num'4421'下了1個訂單,大於4天但小於或包括15天。

任何幫助真的很感激。謝謝。

回答

0

的一種方法是使用exists

select count(distinct cust_num) 
from customers t 
where exists (select 1 
       from customers t2 
       where t2.cust_num = t.cust_num and 
        t2.date between t.date and date_add(t.date, interval 3 day) 
      ); 

這兩個查詢具有相同的結構。您只需要在子查詢中的where子句中更改條件。

+0

戈登感謝您的快速回復。但是目前只有一張桌子,所以我沒有什麼可以加入到使用你的存在的想法。有沒有辦法,只使用上表中的字段?我想我可以爲這個存在的查詢創建一個表。如果它只包含我上面顯示的三列,我需要在另一張表中填寫什麼內容?同樣,你或其他人是否會在語法中再次將上面的查詢寫在上面?我有點困惑'從t t2選擇1'等 – 187213

+0

我明白,t是我的表,t是表2。此外,我想根據日期列每月重複我的查詢。因此,我需要在WHERE子句中添加WHERE date BETWEEN'2016-02-01'和'2016-02-29'之類的東西,那麼你能證明我將如何包含這個嗎?謝謝 – 187213

+0

@ 187213他的查詢只使用1個表,正如你所看到的,他從t中選擇兩次(Gordon,我認爲t令人困惑。)所以只要將它改爲你的表名即可。 t2是一個別名,所以他可以在內部和外部之間進行比較 – Yossi