Mysql
將表中最接近的日期與僅包含日期的表匹配
我試圖從前一個日期的值中感受表格中的一些差距。我創建了一個如下所示的日期表:
主表如下所示:
我想要達到的主要結果是:
我做了一個查詢:
SELECT c.date, e.capture_date, company, value FROM `calendar` c INNER JOIN companies e ON e.capture_date = (SELECT e1.capture_date FROM companies e1 WHERE e1.capture_date <= c.date ORDER BY capture_date DESC LIMIT 1) WHERE e.company='Electronic Arts Inc.';
但是對於像這樣的公司:
同樣的查詢給了我這個結果:
當我需要這個時:
這個問題有解決方案嗎?
你需要:
- 從日曆中取一個日期
- 從不高於日曆日期的表格中取一行
- 確保表格中沒有另一行包含步驟 1 和步驟 2 的日期之間的日期(該日期高於步驟 2 的日期,但不高於步驟 1 的日期)
所以這將是
SELECT * FROM calendar t1 JOIN datatable t2 ON t1.date >= t2.date WHERE NOT EXISTS ( SELECT NULL FROM datatable t3 WHERE t1.date >= t3.date AND t3.date > t2.date )
更新
程式碼已更新。使用的表/列的名稱取自問題。添加了允許從表中的許多公司中選擇一家公司的條件。
查詢文本:
SELECT * FROM calendar t1 JOIN companies t2 ON t1.`date` >= t2.capture_date WHERE NOT EXISTS ( SELECT NULL FROM companies t3 WHERE t1.`date` >= t3.capture_date AND t3.capture_date > t2.capture_date AND t2.company = t3.company ) AND t2.company = @company_name;