【问题标题】:MySQL LEFT JOIN ON Closest DateMySQL LEFT JOIN ON 最近日期
【发布时间】:2022-01-01 13:16:33
【问题描述】:

我正在尝试通过与 Range 表连接来扩展较小的表来创建每日时间点表。 Range 表定义了我要为其创建数据的日期。指标表保存定期持久化的数据。这些表如下所示:

范围

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

日期表应定义构建输出表的日期范围。我想加入 Range.date 上大于 Metric.date 的表,因此输出如下所示。

输出

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
);

上面返回每个日期的行,度量大于日期的度量组合。我可以看到外部 GROUP BY 日期如何解决这个问题,但它看起来很难看,而且性能会非常糟糕。有没有更简单的方法?

提前致谢:)

【问题讨论】:

  • 您的语法看起来像特定于 SQL Server (MS SQL) 并且与 MySQL 无关。仔细检查您的 DBMS。
  • 我想加入 Range.date 大于 Metric.date 的表,因此输出如下所示。 例如,在输出列表中使用相关子查询。
  • @Luuk - 该参考似乎在谈论“最近的日期”,这个问题在哪里是关于“之前的”。
  • @Luuk - 我将“最近”或“最近”解释为任何方向。例如,给定“1,2,7,9”,“7”将“最接近”“6”(也是“5”)。最接近“8”的将是“7”或“9”。 “最近的”可能是一个更好的术语。 (示例数据不足以阐明真实意图。)我担心 shecode 的目标可能与 Ron95 的不同。

标签: mysql join left-join groupwise-maximum


【解决方案1】:

您似乎想在最近的较小日期加入。你试过了吗:

Select Range.date, A, B
from Range inner join Metric
on Metric.date = (select max(date) from Metric where date < Range.date);

【讨论】:

  • 非常感谢,一个简单的解决方案。我也使用了 LEFT 而不是 INNER JOIN。
猜你喜欢
  • 2014-06-02
  • 2018-09-05
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
相关资源
最近更新 更多