0

我需要查询方面的帮助。

select *,min(cast(hour(now())- hour_offer) as unsigned))  as time_left 
       from out_of_offer 
       group by offer_id 
       order by time_left asc

我的 out_of_offer 表中有多个 hour_offer,我只需要获取最接近当前时间的一条记录(按 offer_id 分组)。

例如

offer_id           hour(now())            hour_offer
    1                 11                   8
    2                 11                   9
    1                 11                   10
    2                 11                   11
    2                 11                   12

我希望我的查询做的是获取第 3 行和第 4 行,因为它们最接近当前时间 (11) 并且它们具有不同的 offer_ids。

hour_offer is mediumint(2) unsigned

有人可以帮我怎么做吗?

编辑hour(now())-hour_offer如果我在 mysql 查询中 打印出结果是一个巨大的(正)数。

4

1 回答 1

1

尝试这样的事情:

SELECT * FROM out_of_offer o,
(SELECT offer_id, MIN(ABS(hour-hour_offer)) AS diff FROM out_of_offer
GROUP BY offer_id) x
WHERE o.offer_id = x.offer_id AND ABS(o.hour-o.hour_offer) = x.diff;

我想最好使用ABS而不是CAST. 我不知道为什么,但你的语法CAST是错误的。

您可以将 de 更改hourhour(now). 我曾经hour在 SQLFiddle 上测试查询。

于 2013-09-27T11:09:50.847 回答