【问题标题】:How to join two tables by matching the date in one table with the date closest to and before in another table如何通过将一个表中的日期与另一个表中最接近和之前的日期匹配来连接两个表
【发布时间】:2021-01-22 15:12:56
【问题描述】:

我正在寻找一个查询,以尝试在每个事件之前获取一组世界排名。这最终将用于线性回归模型,以查看预测事件结果与世界排名的准确性。注意。同一天可以有多个锦标赛。

【问题讨论】:

标签: mysql sql ranking


【解决方案1】:

您可以使用lag() 获取每个事件之前 的时间段。然后join

select e.*, r.*
from rankings r left join
     (select e.*,
             lag(event_date) over (order by event_date) as prev_event_date
      from events e
     ) e
     on r.ranking_date < event_date and
        (r.ranking_date >= prev_event_date or prev_event_date is null)

【讨论】:

  • 嘿,非常感谢这个非常有帮助的,对不起,我对 MySQL 还很陌生。你能解释一下单字母符号是什么意思吗?至于你为什么写“from events e”而不是“from events”
  • @hyphen_question 。 . .这些是表别名,是 SQL 语言的基本部分。它们在某些情况下是必需的,但通常会使查询更易于编写和阅读。
  • 啊,这让事情变得更快/更整洁,感谢您的帮助!
【解决方案2】:

我认为 INNER JOIN 可以解决您的问题

SELECT E.Event, E.Event_Date, R.PlayerName, R.World_Ranking
FROM EVENTS_TABLE E 
INNER JOIN RANKINGS_TABLE R on MONTH(E.Event_Date) = MONTH(R.Ranking_Date)
          AND YEAR(E.Event_Date) = YEAR(R.Ranking_Date)

【讨论】:

    猜你喜欢
    • 2023-03-04
    • 1970-01-01
    • 2014-12-12
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多