Mysql

將表中最接近的日期與僅包含日期的表匹配

  • April 20, 2021

我試圖從前一個日期的值中感受表格中的一些差距。我創建了一個如下所示的日期表:

主表如下所示:

我想要達到的主要結果是:

我做了一個查詢:

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. 從不高於日曆日期的表格中取一行
  3. 確保表格中沒有另一行包含步驟 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;

展示小提琴

引用自:https://dba.stackexchange.com/questions/290119