我有以下查询,该查询什么也不返回:
SELECT e.`value`, e.`machine_id`, e.`date_recorded`
from engine_hours e
where e.`date_recorded` >= NOW() - INTERVAL 32 DAY
AND e.`date_recorded` <= NOW() - INTERVAL 2 DAY
AND e.`machine_id` IN (SELECT m.id FROM `machines` m WHERE m.`title` = 'ABC-123')
当我将查询和子查询分为两个独立的查询时,它们可以正常工作
问题: 如何使用子查询返回主查询的内容以及主查询的WHERE部分中的日期边界。
说明和更好的解释: 我没有错误。
当我将子查询作为自己的查询运行时,即:
SELECT m.id FROM `machines` m WHERE m.`title` = 'ABC-123'
它返回正确的1234
。当我在主查询中使用此返回值1234
时,即:
SELECT e.`value`, e.`machine_id`, e.`date_recorded`
from engine_hours e
where e.`date_recorded` >= NOW() - INTERVAL 32 DAY
AND e.`date_recorded` <= NOW() - INTERVAL 2 DAY
AND e.`machine_id = '1234'
我得到了我想要的数据。 我似乎无法理解我在做什么错。
说明日期:
我想获取32天前到2天前的数据:
where e.`date_recorded` >= NOW() - INTERVAL 32 DAY
AND e.`date_recorded` <= NOW() - INTERVAL 2 DAY
ie now
是2019-03-06,32天前(NOW() - INTERVAL 32 DAY
)将是 2019-02-02
并且类似地,两天前将是 2019-03-04 。
我想要的信息应大于或等于(>=
) 2019-02-02 并且小于或等于(<=
) 2019 -03-04 。
答案 0 :(得分:1)
使用加入
SELECT e.`value`, e.`machine_id`, e.`date_recorded`,m.id
from engine_hours e join `machines` m on e.`machine_id`=m.id
where e.`date_recorded` >= NOW() - INTERVAL 32 DAY
AND e.`date_recorded` <= NOW() - INTERVAL 2 DAY
and m.`title` = 'ABC-123'
答案 1 :(得分:1)
已编辑
我自己尝试过,效果很好。每个查询都正确(语法和逻辑)。这两个查询一起也是正确的(语法和逻辑)。
是这样的:
machine_id
中目标行中的engine_hours
与1234
不同。date_recorded
中目标行中的engine_hours
不在所需的日期范围内。我建议您删除源代码中的整个查询,然后重新编写。您可能有一些隐藏的字符,使用了错误的运算符等。