P粉7331667442023-08-25 00:59:49
當我需要處理這個問題時,為了填補缺失的日期,我實際上創建了一個參考表,只包含我感興趣的所有日期,並在日期欄位上連接資料表。這很簡單粗暴,但它有效。
SELECT DATE(r.date),count(d.date) FROM dates AS r LEFT JOIN table AS d ON d.date = r.date GROUP BY DATE(r.date) ORDER BY r.date ASC;
至於輸出,我會使用SELECT INTO OUTFILE而不是手動產生CSV。這樣我們就不必擔心轉義特殊字元的問題。
P粉5936497152023-08-25 00:39:00
當您在伺服器端需要類似的東西時,通常會建立一個包含兩個時間點之間所有可能日期的表,然後將此表與查詢結果進行左連接。類似以下內容:
create procedure sp1(d1 date, d2 date) declare d datetime; create temporary table foo (d date not null); set d = d1 while d <= d2 do insert into foo (d) values (d) set d = date_add(d, interval 1 day) end while select foo.d, count(date) from foo left join table on foo.d = table.date group by foo.d order by foo.d asc; drop temporary table foo; end procedure
在這種特定情況下,最好在客戶端進行一些檢查,如果當前日期不是前一天的後一天,則添加一些附加字串。