我有一個查詢,它應該獲取過去 14 天內添加到表中的資料。現在的問題是該表可能沒有特定日期的資料或可能根本沒有資料。但我想要一個場景,其中結果可以包含最近 14 個日期的所有日期,并回傳結果計數(如果可用)或回傳 0 作為默認值。
我目前的查詢:
SELECT b.created_at day, COUNT(b.id) count
FROM businesses b
WHERE b.created_at BETWEEN SUBDATE(NOW(), 14) AND NOW()
GROUP BY b.created_at
示例表:
id created_at
1 2021-11-20
2 2021-11-20
3 2021-11-19
4 2021-11-18
5 2021-11-17
在上表上運行的上述查詢將產生如下結果:
day count
2021-11-20 2
2021-11-19 1
2021-11-18 1
2021-11-17 1
我希望實作的目標應該是這樣的;使用當前日期為 2021-11-22
day count
2021-11-22 0
2021-11-21 0
2021-11-20 2
2021-11-19 1
2021-11-18 1
2021-11-17 1
2021-11-16 0
2021-11-15 0
2021-11-14 0
2021-11-13 0
2021-11-12 0
2021-11-11 0
2021-11-10 0
2021-11-09 0
從上面的查詢中,WHERE 子句檢查created_at當前日期和 14 天間隔之間的值向后。該表顯然沒有所有日期的資料,這就是為什么我希望為這些日期回傳 0。請問這個怎么辦。謝謝。
uj5u.com熱心網友回復:
我想created_at是DATE不會DATETIME的,否則DATE(created_at)應該使用。
添加一個運行編號為 0 - 13 的輔助表以生成缺少資料的行。
SELECT DATE(NOW()) - INTERVAL n.diff DAY AS day, COALESCE(d.counts, 0)
FROM (
SELECT 0 diff UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6
UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12 UNION SELECT 13
) n
LEFT JOIN (
SELECT b.created_at, COUNT(b.id) counts
FROM businesses b
WHERE b.created_at BETWEEN SUBDATE(NOW(), 14) AND NOW()
GROUP BY b.created_at
) d ON d.created_at = DATE(NOW()) - INTERVAL n.diff DAY
ORDER BY day
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/362828.html
上一篇:Rspec模擬和存根與期望混淆
