Максимальное количество столбцов в группе
Я написал запрос, который позволяет мне находить ближайшие комнаты, используя групповой метод 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()), потому что он будет возвращать события, которые уже произошли.
1 ответ
Предполагая, что 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