左加入生效日期

Left Join with effective dates

我有两个 table。一个 table 包含事件,另一个 table 包含一群用户的生效日期。

user_id | date_effective | rate
U1        2015-01-01       08.00
U2        2015-01-01       09.00
U1        2015-02-01       10.00
U2        2015-02-01       11.00
U1        2015-03-01       12.00

event_id | date_event
E1         2015-01-15
E2         2015-02-15
E3         2015-03-15

我正在为特定用户所附加的每个事件以及该用户的该事件的生效日期提取报告。对于 U1,它看起来像这样。

event_id | date_event | rate
E1         2015-01-15   08.00
E2         2015-02-15   10.00
E3         2015-03-15   12.00

我认为生效日期需要按升序排序,这样我就可以在左联接中选择第一个,这是默认行为。我遇到的问题是它不允许我在像这样进行 Left Join 时订购生效日期:

SELECT event.event_id, event.event_date, effective.rate
FROM event
LEFT JOIN effective ON effective.user_id=U1
ORDER BY effective.date_effective ASC

我尝试的另一种方法是在 Left Join 的 ON 子句中使用比较运算符,但没有用。真没想到。

如有任何建议,我们将不胜感激!

编辑 要求:对于任何事件日期,需要向后查找并找到事件日期之前的第一个生效日期。如果今天发生的事件昨天生效,一个月前生效,则应使用昨天的生效日期。

我没听错吗? 您想要给定 user_id 的第一个 date_effective ?

有子查询:

SELECT * 
    ,date_effecitve = (SELECT top 1 date_effective
                       FROM effective
                       WHERE user_id = 'U1'
                         AND date_effective <= DATE_event
                       ORDER BY date_effective DESC)

    ,rate = (SELECT top 1 rate
             FROM effective
             WHERE user_id = 'U1'
               AND date_effective <= DATE_event
             ORDER BY date_effective DESC)
FROM event

结果user_id = U1

event_id  date_event    date_effective    rate
E1        15.01.2015    01.01.2015        8
E2        15.02.2015    01.02.2015        10
E3        15.03.2015    01.03.2015        12

结果user_id = U2

event_id  date_event    date_effective    rate
E1        15.01.2015    01.01.2015        9
E2        15.02.2015    01.02.2015        11
E3        15.03.2015    01.02.2015        11

编辑: 删除了我的加入代码,因为它不是 100% 正确的。