2012-06-11 2 views
1

두 개의 테이블이 있습니다. 하나는 트랜잭션이 있고 (날짜 포함) 있습니다. 백분율과 날짜가 적용된 백분율 (00:00:00으로 가정). 백분율은 새로운 백분율이 적용될 때까지 유효합니다. 거래가 발생했을 때 그 비율에 합류해야합니다.MySQL은 가장 최근 시작일에 JOIN을 원하십니까?

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은 내 미약 한 시도 비웃었다 :

나는 시도했다.

어떻게하면됩니까? 더욱 간단없이 하위 쿼리와

답변

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 
+0

감사합니다.이 기능은 아름답게 작동합니다. – MikeP

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의 다른 필드를 검색하지 않으려면 더 이상 적합하지 않습니다./

+0

이것은 완벽하게 작동했습니다. 이 쿼리에서는 유효 비율을 찾기 만하면됩니다. 다른 ORDER BY 값 (예 : 금액)으로도 계속 사용할 수 있습니까? 하위 쿼리 방식보다 빠르지 않습니까? – MikeP

+0

이 방법은 비율이 항상 시간이 지남에 따라 증가하는 경우에만 작동합니다. 현재 작성된 u 리는 이벤트 날짜 이전 및 이후의 모든 유효 날짜에 대해 가장 큰 백분율 값을 가져 오며, 이는 적용 가능한 최신 값을 얻는 것과 같지 않습니다. –

+0

고마워, 알았다. 다시 한번 감사드립니다. 프레드! – MikeP

관련 문제