mysql - 基于子查询覆盖数据

标签 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  

最佳答案

这应该可以解决问题:

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

fiddle here .

关于mysql - 基于子查询覆盖数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20227113/

相关文章:

mysql - 在mysql中用数字和字符对列进行排序

mysql - MySQL 中的表为空集

mysql - 限制行的大小是否有利于 MySQL 表的大小?

mysql - 无法将 2009-03-08 插入时间戳字段

mysql - MySQL 数据库的登录表布局

c# - 在c# mono应用程序中通过localhost/127.0.0.1 mysql连接到本地MariaDB MySQL Linux服务器的问题

mysql - 现有 mysql 表或单独表中的附加字段

PHP连接问题和超时问题

mysql - 如何获得两个时间范围之间的随机时间(不是日期)

使用 Subversion 进行 MySQL 版本控制