0

groupwise max メソッドを使用して最も近い部屋を取得できるクエリを作成しました。しかし、複数の列に対してグループごとの最大化を行うにはどうすればよいですか?

サブクエリが最も近い部屋を提供し、それらをメインテーブルに結合する以下のクエリがあります。ここで、次に発生する最初のイベントを選択したいと思います。

例: MIN(DATEDIFF(日付、現在())) > 0

SELECT name, date, t1.Room, descr, t1.D
FROM Events
JOIN
(
        SELECT Roomid, Room, Latitude, Longitude,
                ACOS(SIN((:lat))*SIN(RADIANS(Latitude)) + COS((:lat))*COS(RADIANS(Latitude))*COS(RADIANS(Longitude)-(:lon)))*(:R) AS D
        FROM Rooms
        WHERE Latitude>(:minLat) AND Latitude<(:maxLat)
                AND Longitude>(:minLon) AND Longitude<(:maxLon)
                AND ACOS(SIN((:lat))*SIN(RADIANS(Latitude)) + COS((:lat))*COS(RADIANS(Latitude))*COS(RADIANS(Longitude)-(:lon)))*(:R) < (:rad)
) AS t1 ON Events.roomid = t1.Roomid
GROUP BY Room
ORDER BY D

誰かがこれを行う方法についての指針を教えてもらえますか?

ありがとう!

PS: イベントは次に発生するイベントである必要があります。ABS(MIN()) は、既に発生したイベントを返すため、使用しません。

4

1 に答える 1

0

Dがあなたの日付であると仮定すると、日付差と制限1で並べ替えます

SELECT name, date, t1.Room, descr, t1.D
FROM Events
JOIN
(
        SELECT Roomid, Room, Latitude, Longitude,
            ACOS(SIN((:lat))*SIN(RADIANS(Latitude)) + COS((:lat))*COS(RADIANS(Latitude))*COS(RADIANS(Longitude)-(:lon)))*(:R) AS D
    FROM Rooms
    WHERE Latitude>(:minLat) AND Latitude<(:maxLat)
            AND Longitude>(:minLon) AND Longitude<(:maxLon)
            AND ACOS(SIN((:lat))*SIN(RADIANS(Latitude)) + COS((:lat))*COS(RADIANS(Latitude))*COS(RADIANS(Longitude)-(:lon)))*(:R) < (:rad)
) AS t1 ON Events.roomid = t1.Roomid
ORDER BY DATEDIFF( D, now())
LIMIT 1
于 2012-03-23T00:32:02.543 に答える