找出缺少的日期
generate_series() 函式對於找出缺少的日期很有幫助。
回顧:
generate_series(from, to, interval)
其中 from 與 to 可以是日期或時間戳,而 interval 可以用「數字 + 時間單位」的字串來指定,例如 '1 month'。
在 Evanston 311 的資料裡,有沒有任何一天完全沒有建立請求?
本練習屬於課程
SQL 中的探索式資料分析
練習說明
- 撰寫一個使用
generate_series()的子查詢,取得evanston311中date_created的min()與max()之間的所有日期。 - 再撰寫一個子查詢,從
evanston311選取所有date_created,並轉為日期。 - 兩個子查詢都應該產生
date型別的值(留意使用::)。 - 從第一個子查詢選取那些在第二個子查詢結果中
NOT IN的日期(day)。這會得到不在date_created中的那些天。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
SELECT day
-- 1) Subquery to generate all dates
-- from min to max date_created
FROM (SELECT generate_series(___(___),
___(___),
___)::___ AS day
-- What table is date_created in?
FROM ___) AS all_dates
-- 4) Select dates (day from above) that are NOT IN the subquery
WHERE day ___
-- 2) Subquery to select all date_created values as dates
(SELECT ___::___
FROM evanston311);