像這樣將返回指定的結果:
SELECT c.customer_id AS `Customer_ID`
, d.day AS `Day`
, COUNT(1) AS `Total(COUNT)`
FROM (SELECT 1 AS customer_id) c
CROSS
JOIN (SELECT 1 AS `dow`, 'Sunday' AS `day`
UNION ALL SELECT 2, 'Monday'
UNION ALL SELECT 3, 'Tuesday'
UNION ALL SELECT 4, 'Wednesday'
UNION ALL SELECT 5, 'Thursday'
UNION ALL SELECT 6, 'Friday'
UNION ALL SELECT 7, 'Saturday'
) d
LEFT
JOIN mytable t
ON t.customer_id = c.customer_id
AND t.c_date >= DATE(NOW()) + INTERVAL -7 DAY
AND t.c_date < DATE(NOW())
AND DAYOFWEEK(t.c_date) = d.dow
GROUP BY c.customer_id, d.dow
ORDER BY c.customer_id, d.dow
注:
我們需要返回七 「日」 的值(週日至週六一個行源),否則,當那天沒有行時,我們不能從表中返回當天的「零」計數。
我們需要定義「當前周」。上面的查詢使用當前日期,並減去七天。如果此查詢在星期三運行,我們將在星期三至星期二前七天收到。如果你的「本週」的定義比不同,則使用產生在報告期開始時的一個DATETIME值,而本報告期後的第一秒(代替DATE(NOW)) + INTERVAL -7 DAY
和DATE(NOW))
)表達
隨訪
尋址評論:「只拿到週一的記錄,所有其他人都不對」
請明白這一點:StackOverflow上是不查詢和代碼寫作服務。上述 答案圖示查詢模式的例子,滿足查詢需要克服的最大駝峯之一:
由於上面提到的答案(在說:)的那條線下面),我們需要一個「當前周」的實際規範。當「今日」是星期二時,這意味着什麼,'2017-06-20'
。確定了哪些日期範圍?如果今天是星期五或星期天,這意味着什麼?
一旦我們有了定義,我們就可以編寫表達式,它將返回開始和結束日期值。
要另外一種方式,...把查詢的這個部分:
AND t.c_date >= DATE(NOW()) + INTERVAL -7 DAY
AND t.c_date < DATE(NOW())
並更換有這樣的事情:
AND t.c_date >= '2017-06-14'
AND t.c_date < '2017-06-21'
或像這樣:
AND t.c_date >= '2017-06-18'
AND t.c_date < '2017-06-25'
什麼日期文字可用於查詢返回th預期的結果?因此,查詢不是「只得到星期一的記錄,所有其他人都不對」[原文如此]。
我們可以使用一個簡單的SELECT語句來測試表達式。我們可以使用用戶定義的變量代替NOW()來測試NOW()的各種可能的值。例如:
SET @tday = '2017-06-21 12:34' ;
SELECT DATE(@tday) - INTERVAL DAYOFWEEK(@tday)-1 DAY AS sd
, DATE(@tday) - INTERVAL DAYOFWEEK(@tday)-8 DAY AS ed
一旦我們返回「開始」和範圍的「結束」的表達,我們可以利用那些在另一個查詢。像上面的一個...
AND t.c_date >= DATE(NOW()) - INTERVAL DAYOFWEEK(NOW())-1 DAY
AND t.c_date < DATE(NOW()) - INTERVAL DAYOFWEEK(NOW())-8 DAY
值得一讀https://meta.stackoverflow.com/questions/261592/how-much-research-effort-is-expected-of-stack-overflow-users – RiggsFolly
你有沒有試圖寫一個查詢呢? – RiggsFolly
請閱讀[我可以詢問哪些主題](http://stackoverflow.com/help/on-topic) 和[如何提出一個好問題](http://stackoverflow.com/help/how-to - 問) 和[完美的問題](http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/) 以及如何創建[最小,完整和可驗證示例] (http://stackoverflow.com/help/mcve) ** SO不是**免費的編碼服務___我們嘗試修復您的代碼,我們不寫你的代碼____ – RiggsFolly