我需要查询帮助。
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
任何人都可以帮我怎么做?
修改
如果我在mysql查询中打印出hour(now())-hour_offer
,结果就是一个巨大的(正数)。
答案 0 :(得分: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
上的语法是错误的。
您可以为hour
更改de hour(now)
。我使用hour
来测试SQLFiddle上的查询。