MySQL子查询与主查询值的日期时间比较

时间:2017-09-13 17:21:39

标签: mysql date subquery

我正在尝试做一个看起来像一个简单的查询...我有一个工作正常的查询,直到我尝试将子查询添加到select子句。我试图通过查询第二个表来添加一个列,其中包含我从第一个表中获得的日期。我不知道加入是否会更好。如果您查看我的第一个示例,它将返回第二个表中的每个记录,而不是使用外部select语句中的日期范围。

SELECT `sales`.`date` as 'newdate', `sales`.`material`, 
`customer_logs`.`name`, `sales`.`billingqty` , 
(select count(*) from iis_logs where datetime > (select 
Date_add(date_format(newdate, "%Y-%m-%d 00:00:00"), interval - 1 day)) 
and datetime < date_format(newdate, '%Y-%m-%d 00:00:00' and url like 
CONCAT('%',material,'%') limit 1) as tr
FROM `sales`
JOIN `customer_logs` ON `customer_logs`.`customer_number` = 
`sales`.`soldtopt`
WHERE `date` >= '2017-09-01'
AND `date` <= '2017-09-30'
ORDER BY `date` DESC
LIMIT 10;

如果我只是像这样输入字符串作为日期,它会在一秒内返回:

SELECT `sales`.`date` as 'newdate', `sales`.`material`, 
`customer_logs`.`name`, `sales`.`billingqty` , 
(select count(*) from iis_logs where datetime > '2017-09-01 00:00:00' 
and datetime < '2017-09-03 00:00:00' and url like 
CONCAT('%',material,'%') limit 1) as tr
FROM `sales`
JOIN `customer_logs` ON `customer_logs`.`customer_number` = 
`sales`.`soldtopt`
WHERE `date` >= '2017-09-01'
AND `date` <= '2017-09-30'
ORDER BY `date` DESC
LIMIT 10;

它没有采用newdate的值我试图进入select语句,而是返回iis_logs表中的每一行......

1 个答案:

答案 0 :(得分:0)

这看起来像是加入的完美候选人。 FWIW,mysql查询优化器通常在子查询的连接上做得更好。