SQL-使用带有日期参数的查询,IN参数用于子查询

时间:2019-03-06 05:30:48

标签: mysql

我有以下查询,该查询什么也不返回:

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

2 个答案:

答案 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_hours1234不同。
  • date_recorded中目标行中的engine_hours不在所需的日期范围内。
  • 您在StackOverflow中发布的查询与源代码中的查询稍有不同。
  • 也许您要在查询中包含数据库名称。如果是这样,请确保您定位的是正确的数据库名称。

我建议您删除源代码中的整个查询,然后重新编写。您可能有一些隐藏的字符,使用了错误的运算符等。