MySQL 在最近的日期加入
MySQL LEFT JOIN ON Closest Date
我正在尝试通过使用范围 table 的联接扩展较小的 table 来创建每日时间点 table。范围 table 定义了我要为其创建数据的日期。指标 table 保存定期持久化的数据。 table 如下所示:
范围
date
2000-01-01
2000-01-02
2000-01-03
2000-01-04
2000-01-05
公制
date
A
B
1999-12-31
3.4
2.2
2000-01-03
6.2
1.1
日期 table 应定义构建输出 table 的日期范围。我想在大于 Metric.date 的 Range.date 上加入 tables,因此输出如下所示。
输出
date
A
B
2000-01-01
3.4
2.2
2000-01-02
3.4
2.2
2000-01-03
3.4
2.2
2000-01-04
6.2
1.1
2000-01-05
6.2
1.1
我尝试了几个不同的版本,但都没有成功。这是我到目前为止所拥有的:
CREATE TABLE OUTPUT
SELECT * FROM [db].Range AS d LEFT JOIN [db].Metric AS m ON d.date >
(SELECT m.date
FROM [db].Metric AS m2
WHERE m2.date < d.date
ORDER BY m2.date ASC
LIMIT 1
);
以上 returns 行对应每个日期,其中指标大于日期的指标组合。我可以看到外部 GROUP BY
日期如何解决这个问题,但它看起来很难看,而且性能会非常糟糕。有没有更简单的方法?
提前致谢:)
您似乎想在更小的最近日期加入。你试过了吗:
Select Range.date, A, B
from Range inner join Metric
on Metric.date = (select max(date) from Metric where date < Range.date);
我正在尝试通过使用范围 table 的联接扩展较小的 table 来创建每日时间点 table。范围 table 定义了我要为其创建数据的日期。指标 table 保存定期持久化的数据。 table 如下所示:
范围
date |
---|
2000-01-01 |
2000-01-02 |
2000-01-03 |
2000-01-04 |
2000-01-05 |
公制
date | A | B |
---|---|---|
1999-12-31 | 3.4 | 2.2 |
2000-01-03 | 6.2 | 1.1 |
日期 table 应定义构建输出 table 的日期范围。我想在大于 Metric.date 的 Range.date 上加入 tables,因此输出如下所示。
输出
date | A | B |
---|---|---|
2000-01-01 | 3.4 | 2.2 |
2000-01-02 | 3.4 | 2.2 |
2000-01-03 | 3.4 | 2.2 |
2000-01-04 | 6.2 | 1.1 |
2000-01-05 | 6.2 | 1.1 |
我尝试了几个不同的版本,但都没有成功。这是我到目前为止所拥有的:
CREATE TABLE OUTPUT
SELECT * FROM [db].Range AS d LEFT JOIN [db].Metric AS m ON d.date >
(SELECT m.date
FROM [db].Metric AS m2
WHERE m2.date < d.date
ORDER BY m2.date ASC
LIMIT 1
);
以上 returns 行对应每个日期,其中指标大于日期的指标组合。我可以看到外部 GROUP BY
日期如何解决这个问题,但它看起来很难看,而且性能会非常糟糕。有没有更简单的方法?
提前致谢:)
您似乎想在更小的最近日期加入。你试过了吗:
Select Range.date, A, B
from Range inner join Metric
on Metric.date = (select max(date) from Metric where date < Range.date);