2012-03-23 66 views
0

我編寫了一個查詢,使我可以使用groupwise max方法獲取最近的房間。但是,我如何爲多列進行分組最大值?Groupwise Max多列

我有下面的查詢,其中子查詢給我最近的房間,然後加入他們與主表。現在我想挑選下一個將要發生的第一個事件。

例:MIN(DATEDIFF(日,NOW()))> 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 2012-03-23 00:35:22

+0

哦,我的錯誤,也都是會發生的一個事件,然後順序,那麼就在我的例子中使用'date'而不是'D'。這是不是讓你想要什麼? – 2012-03-23 00:38:39

+0

,它會命令它只購買我認爲的日期。我也想讓它按D排列。那可能嗎? 此外,這將返回已經發生的日期是正確的? – maknelly 2012-03-23 00:41:01