先準備用來排查的資料
8 至 10 月的趨勢要有三個月份,即使 9 月沒有訂單。只把訂單分組不會自動產生空月份。先用已指定月份清單,再接完整訂單匯出,計配對訂單編號而不是月曆行數。
以下完整建表及資料只在新的 SQLite 測試資料庫執行。全部紀錄均為假設,數量以件計,輸入的 cents 金額欄以貨幣的分存整數;計算後的平均數可能不足整分。小型例子的各表均完整列在預覽。
| 期間 |
|---|
| 2026-08 |
| 2026-09 |
| 2026-10 |
| 編號 | 落單日 |
|---|---|
| O1 | 2026-08-02 |
| O2 | 2026-10-03 |
CREATE TABLE months(period TEXT PRIMARY KEY);
CREATE TABLE orders(id TEXT PRIMARY KEY,placed_on TEXT);
INSERT INTO months VALUES ('2026-08'),('2026-09'),('2026-10');
INSERT INTO orders VALUES ('O1','2026-08-02'),('O2','2026-10-03');重現錯誤結果,再核對更正
SELECT strftime('%Y-%m',placed_on) AS period,COUNT(*) AS order_count FROM orders GROUP BY period ORDER BY period;| 期間 | 訂單數 |
|---|---|
| 2026-08 | 1 |
| 2026-10 | 1 |
SELECT m.period,COUNT(o.id) AS order_count FROM months m LEFT JOIN orders o
ON strftime('%Y-%m',o.placed_on)=m.period GROUP BY m.period ORDER BY m.period;| 期間 | 訂單數 |
|---|---|
| 2026-08 | 1 |
| 2026-09 | 0 |
| 2026-10 | 1 |
錯誤時間線由 8 月跳到 10 月,各一張訂單;更正後保留 9 月為零。能寫零,是因為本例明確有完整匯出;若資料不齊,應記未能確認。
套用前先測邊界及資料範圍
加入 11 月訂單,不會自行擴大 8 至 10 月範圍;要包括它,須明確修改報表月曆。
邊界測試要另開新的假設資料庫,重做完整建表及資料,只套用以下改動,再執行更正查詢。測試改動不可用於正式系統。
INSERT INTO orders VALUES ('O3','2026-11-01');| 期間 | 訂單數 |
|---|---|
| 2026-08 | 1 |
| 2026-09 | 0 |
| 2026-10 | 1 |
這是訂單數,不是需求預測。實際取消及草稿處理、時區和資料齊全程度要先訂明。
以上錯誤、更正及邊界結果都已在 SQLite 執行,並與另行編寫的預期資料逐行核對。證據只適用於這組假設條件,未測其他資料庫、正式效能或你的現有資料結構。