2012-03-23 4 views
0

Ive написал запрос, который позволяет мне получить самые близкие комнаты с использованием метода groupwise max. Но как мне сделать groupwise max для нескольких столбцов?Groupwise Max Multiple Columns

У меня есть запрос ниже, где подзапрос дает мне самые близкие комнаты, а затем соединяет их с основной таблицей. Теперь я хочу выбрать первое событие, которое произойдет дальше.

Ex: 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()), потому что это вернет события, которые уже произошли.

ответ

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 
+0

D является расстояние, я хочу, чтобы получить следующее событие, которое должно произойти, а затем заказ D – maknelly

+0

О, моя ошибка, просто используйте вместо этого 'date' вместо' D' в моем примере. Разве это не значит, что вы хотите? –

+0

, который закажет его купить только даты, которые я думаю. Я также хочу, чтобы он заказал также D. Это возможно? Кроме того, это вернет даты, которые уже произошли правильно? – maknelly