2013-09-27 73 views
0

我需要查詢的幫助。計算由唯一ID分組的表的最小值 - mysql

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 

我有多個hour_offer我out_of_offer表,我需要得到一個記錄(通過offer_id分組)最接近當前時間。

例如

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

我想我的查詢做的是讓第三和第四行,因爲他們是最接近當前小時(11),他們有不同的offer_ids。

hour_offer is mediumint(2) unsigned 

任何人都可以幫助我如何做到這一點?

編輯 如果我在MySQL查詢打印出hour(now())-hour_offer結果是一個巨大的(正)號。

+0

什麼是主鍵? – Strawberry

+0

它是id字段 –

+0

呃,不,它不是,爲什麼10比12接近11? – Strawberry

回答

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 isntead的CAST。我不知道爲什麼,但你的CAST的語法是錯誤的。

您可以更改de hourhour(now)。我用hour來測試SQLFiddle上的查詢。

+0

盧卡斯的重大答案。它的工作原理 –

+0

不客氣。 – Minoru