MySQL时间戳介于2小时前和3天前

MySQL时间戳介于2小时前和3天前,mysql,timestamp,between,Mysql,Timestamp,Between,试图在时间戳字段上执行MySQL查询 我接近得到正确的结果,但它总是只落后3天,今天什么都没有。我相信这与使用时间戳字段的介于之间有关 SELECT billing_first_name, cart_id, placed_ts, s_email FROM `orders` WHERE `paypal_response` IS NULL AND `authorize_response` IS NULL AND `s_email`

试图在
时间戳
字段上执行MySQL查询

我接近得到正确的结果,但它总是只落后3天,今天什么都没有。我相信这与使用
时间戳
字段的
介于
之间有关

SELECT
    billing_first_name,
    cart_id,
    placed_ts,
    s_email           
FROM   `orders`
WHERE `paypal_response` IS NULL
   AND `authorize_response` IS NULL
   AND `s_email` IS NOT NULL
   AND (`placed_ts` BETWEEN
        DATE_SUB(DATE(NOW()), INTERVAL 3 DAY)
        AND DATE_SUB(DATE(NOW()), INTERVAL 2 HOUR))     
GROUP BY `cart_id`
ORDER BY placed_ts DESC

这是因为您使用的是
DATE(NOW())
而不是
NOW()
。这会丢弃一天中的时间,因此它会从一天的开始减去2小时(即前一天晚上10点),而不是现在之前的2小时

AND (`placed_ts` BETWEEN
    DATE_SUB(DATE(NOW()), INTERVAL 3 DAY)
    AND DATE_SUB(NOW(), INTERVAL 2 HOUR))     

这是因为您使用的是
DATE(NOW())
而不是
NOW()
。这会丢弃一天中的时间,因此它会从一天的开始减去2小时(即前一天晚上10点),而不是现在之前的2小时

AND (`placed_ts` BETWEEN
    DATE_SUB(DATE(NOW()), INTERVAL 3 DAY)
    AND DATE_SUB(NOW(), INTERVAL 2 HOUR))     

我认为这里的错误不止这些however@Strawberry你的意思是像使用
groupby
而不进行任何聚合一样?@Barmar不知道如何回答
groupby
问题,但是如果我删除
DATE()
部分,我确实会得到想要的结果。
cart\u id
字段现在是唯一的,但几个月前并不是为了澄清问题,我只是使用了一个
GROUP BY
,但是在查看所需的时间范围时不一定需要它,谢谢。如果
cart\u id
是唯一的,那么没有必要按cart\u id分组。我认为这里有更多的错误however@Strawberry你的意思是像使用
groupby
而不进行任何聚合吗?@Barmar不知道如何回答
groupby
问题,但是,如果删除
DATE()
部分,我确实会得到所需的结果。
cart\u id
字段现在是唯一的,但几个月前并不是为了澄清问题,我只是使用了一个
GROUP BY
,但是在查看所需的时间范围时不一定需要它,谢谢。如果
cart\u id
是唯一的,那么就不需要
GROUP BY cart\u id
。为什么要使用
GROUP BY
而不使用任何聚合函数,如
COUNT()
SUM()
?结果将来自具有相同
cart\u id
的所有行中不可预测的行。为什么使用
groupby
而没有任何聚合函数,如
COUNT()
SUM()
?结果将来自具有相同
cart\u id
的所有行中不可预测的行。