我有两张桌子。一个表包含事件,另一个表包含一组用户的有效日期。
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
我认为有效日期需要按升序排序,这样我才能在左连接中选择第一个,这是默认行为。我遇到的问题是它不允许我在执行左连接时订购生效日期:
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子句中使用比较运算符,但这不起作用。真的没想到它。
任何建议都将深表感谢!
编辑要求:对于任何事件日期,它需要向后查看并找到事件日期之前的第一个生效日期。如果今天发生的事件是昨天的生效日期和一个月前的生效日期,则应使用昨天的生效日期。
答案 0 :(得分:0)
我理解你了吗?
您想要给定date_effective
的第一个user_id
?
使用子查询:
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%正确。