根据子查询覆盖数据

时间:2013-11-26 20:17:57

标签: mysql

我有一个记录流程费率的费率表

DateTime                Rate  
2013-11-25 05:00:00     22  
2013-11-25 06:00:00     78  
2013-11-25 07:00:00     33  
2013-11-25 07:10:00     56  
2013-11-25 08:30:00     12

和停机时间表,记录上述数据可能无效的时间段

StartDateTime                EndDateTime  
2013-11-25 04:59:00          2013-11-25 05:10:00  
2013-11-25 07:00:00          2013-11-25 07:15:00  

如何获取以下输出,其中在停机时间表中的任何时段之间记录的任何速率值被固定值替换,例如50?

DateTime                Rate  
2013-11-25 05:00:00     50  
2013-11-25 06:00:00     78  
2013-11-25 07:00:00     50  
2013-11-25 07:10:00     50  
2013-11-25 08:30:00     12  

1 个答案:

答案 0 :(得分:3)

这应该可以解决问题:

SELECT r.datetime, if(d.startDatetime IS NULL, r.rate, 50) rate
FROM rates r
LEFT JOIN downtime d
ON r.datetime BETWEEN d.startDatetime AND d.endDatetime

小提琴here