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 でグループ化) を 1 つだけ取得する必要があります。

例えば

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

クエリで実行したいのは、現在の時間 (11) に最も近く、offer_id が異なる 3 番目と 4 番目の行を取得することです。

hour_offer is mediumint(2) unsigned

誰かがそれを行う方法を手伝ってもらえますか?

編集mysql クエリで 出力hour(now())-hour_offerすると、結果は巨大な (正の) 数値になります。

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 は に変更できhourますhour(now)。以前hourは SQLFiddle でクエリをテストしていました。

于 2013-09-27T11:09:50.847 に答える