计算由唯一id - mysql分组的表的min

时间:2013-09-27 09:29:25

标签: mysql sql group-by min

我需要查询帮助。

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,结果就是一个巨大的(正数)。

1 个答案:

答案 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上的查询。