mysql日期序列填充_MySQL如何在范围内填充缺失的日期?
我不喜歡其他的答案,要求創建表格等等。這個查詢在沒有helper表的情況下有效地執行。SELECT
IF(score IS NULL, 0, score) AS score,
b.Days AS date
FROM
(SELECT a.Days
FROM (
SELECT curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY AS Days
FROM (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a
CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS b
CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS c
) a
WHERE a.Days >= curdate() - INTERVAL 30 DAY) b
LEFT JOIN your_table
ON date = b.Days
ORDER BY b.Days;
所以讓我們來分析一下。SELECT
IF(score IS NULL, 0, score) AS score,
b.Days AS date
if將檢測沒有得分的天數并將其設置為0。b、 Days是您從當前日期選擇的配置天數,最多1000天。(SELECT a.Days
FROM (
SELECT curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY AS Days
FROM (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a
CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS b
CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS c
) a
WHERE a.Days >= curdate() - INTERVAL 30 DAY) b
這個子查詢是我在stackoverflow上看到的。它有效地從當前日期生成過去1000天的列表。結尾WHERE子句中的間隔(當前為30)決定返回哪些天;最大值為1000。這個查詢可以很容易地修改為返回值為100年的日期,但1000年應該對大多數事情都有好處。LEFT JOIN your_table
ON date = b.Days
ORDER BY b.Days;
這是將包含分數的表放入其中的部分。與日期生成器查詢中的選定日期范圍進行比較,以便能夠在需要時填充0(分數最初將設置為NULL,因為它是LEFT JOIN;這在select語句中是固定的)。我也按日期點,只是因為。這是您的偏好,您也可以按分數訂購。
在ORDER BY之前,您可以很容易地加入到您的表中,其中包含您在編輯時提到的用戶信息,以添加最后一個需求。
我希望這個版本的查詢可以幫助某些人。謝謝你的閱讀。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的mysql日期序列填充_MySQL如何在范围内填充缺失的日期?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: won10怎么用u盘装系统 用U盘安装W
- 下一篇: 载重王电动车充满电不能充到100是怎么回