ค้นหาวันที่ที่หายไป
ฟังก์ชัน generate_series() มีประโยชน์มากในการระบุวันที่ที่หายไปจากข้อมูล
ทบทวนไวยากรณ์:
generate_series(from, to, interval)
โดยที่ from และ to คือ date หรือ timestamp และ interval ระบุเป็น string ที่มีตัวเลขและหน่วยเวลา เช่น '1 month'
มีวันไหนในข้อมูล Evanston 311 ที่ไม่มีการสร้างคำร้องเลยหรือไม่?
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Exploratory Data Analysis ใน SQL
คำแนะนำการฝึกหัด
- เขียน subquery โดยใช้
generate_series()เพื่อดึงวันที่ทั้งหมดระหว่างค่าmin()และmax()ของdate_createdในตารางevanston311 - เขียน subquery อีกอันเพื่อเลือกค่าทั้งหมดของ
date_createdในรูปแบบ date จากตารางevanston311 - ทั้งสอง subquery ควรให้ผลลัพธ์เป็นชนิด
date(สังเกตการใช้::) - เลือกวันที่ (
day) จาก subquery แรกที่NOT INผลลัพธ์ของ subquery ที่สอง เพื่อหาวันที่ที่ไม่ปรากฏใน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);