在MySQL中填滿日期範圍內的缺失日期
在MySQL中,處理缺失日期需要確定所需的日期並用適當的值填滿缺口。幸運的是,有一個解決方案,它涉及利用NUMBERS表技巧來產生遞增日期清單。
首先,建立一個包含自動遞增id列的NUMBERS表:
<code class="language-sql">CREATE TABLE numbers ( id int(10) unsigned NOT NULL auto_increment, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;</code>
使用INSERT語句填入表格中所需數量的值。
接下來,使用DATE_ADD根據id值產生日期清單:
<code class="language-sql">SELECT DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY) FROM `numbers` `n` WHERE DATE_ADD('2010-06-06', INTERVAL `n`.`id` -1 DAY) <= '2010-06-14'</code>
分別將「2010-06-06」和「2010-06-14」替換為您自己的起始日期和結束日期。
最後,依照時間部分與資料表執行LEFT JOIN:
<code class="language-sql">SELECT `x`.`ts` AS `timestamp`, COALESCE(`y`.`score`, 0) AS `cnt` FROM (SELECT DATE_FORMAT(DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY), '%Y-%m-%d') AS `ts` FROM `numbers` `n` WHERE DATE_ADD('2010-06-06', INTERVAL `n`.`id` - 1 DAY) <= '2010-06-14') x LEFT JOIN `y` ON STR_TO_DATE(`y`.`date`, '%d.%m.%Y') = STR_TO_DATE(`x`.`ts`, '%Y-%m-%d')</code>
在這個查詢中,缺失日期將會填入0。為了保持原始日期格式,可以使用DATE_FORMAT(x.ts, '%d.%m.%Y') AS timestamp
。 注意,這裡對y
表進行了修改,確保日期格式一致,使用STR_TO_DATE
函數進行轉換。 這比原文中的方法更可靠。
以上是如何填入 MySQL 日期範圍中缺少的日期?的詳細內容。更多資訊請關注PHP中文網其他相關文章!