Максимальное количество столбцов в группе - PullRequest
0 голосов
/ 23 марта 2012

Я написал запрос, который позволяет мне находить самые близкие комнаты, используя метод 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

Может кто-нибудь подсказать, как это сделать?

Спасибо!

P.S: Событие должно быть следующим происходящим событием. Я не использую ABS (MIN ()), потому что он будет возвращать события, которые уже произошли.

1 Ответ

0 голосов
/ 23 марта 2012

Предполагая, что 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
...