1

我有两张表,一张有交易(有日期)。另一个带有百分比和日期,它生效的百分比(假设 00:00:00)。该百分比一直有效,直到新的百分比生效。我需要加入交易发生时生效的百分比。

transactions_table

event_date     amount
2011-01-01     230
2011-02-18     194
2011-03-22     56
2011-04-30     874

percent_table

effective     percent
2010-12-30    15
2011-03-05    25
2011-04-12    30

我正在寻找的结果是:

event_date     amount     percent
2011-01-01     230        15
2011-02-18     194        15
2011-03-22     56         25
2011-04-30     874        30

我试过了:

SELECT t.event_date, t.amount, p.percent 
FROM transactions_table AS t 
LEFT JOIN percent_table AS p ON t.event_date >= p.effective 
ORDER BY `t`.`event_date` DESC LIMIT 0 , 30;

这给了我看似随机的百分比。在我看来,我需要获得最大的日期 >= p.effective,而不仅仅是任何随机日期 >= p.effective。

我试过:

SELECT t.event_date, p.percent 
FROM bedic_sixsummits_transactions AS t 
LEFT JOIN bedic_sixsummits_percent AS p ON MAX(t.event_date >= p.effective) 
ORDER BY `t`.`event_date` DESC LIMIT 0 , 30

但是 MySQL 只是嘲笑我微弱的尝试。

我怎样才能做到这一点?

4

2 回答 2

1
SELECT t.event_date, t.amount, p.percent
FROM bedic_sixsummits_transactions AS t
LEFT JOIN bedic_sixsummits_percent AS p
ON p.effective = 
   ( SELECT MAX( p2.effective ) FROM bedic_sixsummits_percent AS p2
     WHERE p2.effective <= t.event_date
   )
ORDER BY t.event_date DESC LIMIT 0 , 30
于 2012-06-11T19:52:04.577 回答
1

更简单且没有子查询:

SELECT event_date, amount, MAX(_percent) as _percent
FROM transactions_table
LEFT JOIN percent_table p1 ON event_date >= effective
GROUP BY event_date, amount
ORDER BY event_date;

http://sqlfiddle.com/#!3/e8ca3/17/0

请注意,这是可能的,因为所涉及的业务模型。如果您不想检索 percent_table 的其他字段,它将不再适用:/

于 2012-06-11T20:25:02.227 回答