跳至內容
Astera Technology

仍有存貨,但近期沒有出入庫的貨品有哪些?

找出仍有存貨但沒有近期變動的貨品,零數量的檢查紀錄不當作出入庫。

先訂清楚要判斷甚麼,再準備資料

最後變動日期應來自真正有數量增減的紀錄。只在非零變動中找最近日期。沒有紀錄時保留空值,因為「不知道何時動過」與「確定幾個月沒動」是兩回事,不能隨便填一個舊日期。

以下全部是假設資料。請在新的 SQLite 測試資料庫建立各表,再執行唯讀查詢。數量以件計,金額以港元的分作整數儲存;顯示港元時除以 100。

假設輸入節錄;完整相關資料見下方 SQL
編號貨品編號數量變動日期
1A52026-10-01
2A-22026-10-02
3B-52026-10-03
4C02026-08-01
下載可編輯 CSV ↓
可直接執行的完整假設資料(SQLite)
CREATE TABLE stock(sku TEXT PRIMARY KEY, opening_qty INTEGER, counted_qty INTEGER);
CREATE TABLE movements(id INTEGER PRIMARY KEY, sku TEXT, qty INTEGER, moved_on TEXT);
CREATE TABLE reservations(id INTEGER PRIMARY KEY, sku TEXT, qty INTEGER, status TEXT);
CREATE TABLE transfers(id INTEGER PRIMARY KEY, sku TEXT, sent_qty INTEGER, received_qty INTEGER, sent_on TEXT);
INSERT INTO stock VALUES ('A',10,12),('B',8,3),('C',6,6);
INSERT INTO movements VALUES (1,'A',5,'2026-10-01'),(2,'A',-2,'2026-10-02'),(3,'B',-5,'2026-10-03'),(4,'C',0,'2026-08-01');
INSERT INTO reservations VALUES (1,'A',8,'confirmed'),(2,'A',3,'cancelled'),(3,'B',5,'confirmed');
INSERT INTO transfers VALUES (1,'A',7,4,'2026-10-05'),(2,'B',2,2,'2026-10-06');

執行查詢,核對實際結果

SQLite 唯讀查詢
SELECT s.sku,s.counted_qty,MAX(CASE WHEN m.qty<>0 THEN m.moved_on END) AS last_movement
FROM stock s LEFT JOIN movements m ON m.sku=s.sku
GROUP BY s.sku,s.counted_qty
HAVING s.counted_qty>0 AND (last_movement IS NULL OR last_movement<'2026-09-10')
ORDER BY s.sku;
以上 SQLite 假設資料的查詢結果
貨品編號盤點數量最後非零變動
C6NULL(未知或沒有資料)
下載可編輯 CSV ↓

C 盤點有 6 件,但所提供的帳目沒有任何非零變動;那筆零數量紀錄不代表入貨或售出。A 和 B 在 10 月有變動,因此不在 9 月 10 日截線前的清單。先確認 C 的歷史是否齊全,才判斷是否滯銷。

按資料範圍使用結果

30 個曆日只是示範篩選條件,不是存貨估值規則。沒有批次入貨及完整帳目,不能據此判斷保質期、過時價值或實際庫齡。

本例的建表、資料及結果已在 SQLite 執行。套用時先在系統測試副本調整欄位及狀態規則,再與流程負責人核對預期結果。其他資料庫平台未經測試。

相關資源