MySQL的SELECT语句中值在一个查询

问题描述:

您好,我有以下MySQL查询:MySQL的SELECT语句中值在一个查询

SELECT sensorNumber, rangeStartTime, rangeEndTime, sensorLow, sensorAverage, sensorHigh 
FROM rangeData 
WHERE rangeStartTime >= 0 
AND rangeEndTime <= 43200 
AND (sensorNumber = 3) 
ORDER BY sensorNumber; 

我怎样才能使这样我可以抓住rangeStartTime外仅1前面和后面的值和rangeEndTime时间跨度?

所以在英语中这将被说成是:“在下午5点和晚上7点之间选择所有的值,也选择在下午5点之前的下一个值,下午7点之后的下一个值。

我尝试以下通过寻找其他的例子,但它没有工作:

SELECT sensorNumber, rangeStartTime, rangeEndTime, sensorLow, sensorAverage, sensorHigh 
FROM rangeData 
WHERE rangeStartTime >= 0 
AND rangeEndTime <= 43200 
AND rangeStartTime < 0 LIMIT 1 
AND rangeEndTime > 43200 LIMIT 1 
AND (sensorNumber = 3) 
ORDER BY sensorNumber; 

每个查询增加了等待时间5-10秒,所以我想做成一个查询此。

+2

也发布您的表定义和示例数据。 (或创建一个小提琴) – amdixon

你可以做到这一点与3个查询,原来的一,一前一和一个为下一个简单的工会:

(SELECT sensorNumber, rangeStartTime, rangeEndTime, sensorLow, sensorAverage, sensorHigh 
FROM rangeData 
WHERE (rangeStartTime BETWEEN 0 AND 43200) AND (sensorNumber = 3)) 
UNION 
(SELECT sensorNumber, rangeStartTime, rangeEndTime, sensorLow, sensorAverage, sensorHigh 
FROM rangeData 
WHERE (rangeStartTime < 0) AND (sensorNumber = 3) 
ORDER BY rangeStartTime DESC 
LIMIT 1) 
UNION 
(SELECT sensorNumber, rangeStartTime, rangeEndTime, sensorLow, sensorAverage, sensorHigh 
FROM rangeData 
WHERE (rangeStartTime > 43200) AND (sensorNumber = 3) 
ORDER BY rangeStartTime ASC 
LIMIT 1) 
ORDER BY sensorNumber; 

(BTW:是不需要的ORDER BY如要查询只有一个sensorNumber

+0

这是我会如何去实现这一目标。 –

+0

如果包含LIMIT ORDER BY总是需要 – Strawberry

+0

谢谢你,那是有效的。 sensorNumber值是字符串,所以有时它不仅仅是传感器#3,因此ORDER BY。 – NutellaAddict