2012-06-07 30 views
0

我有一個mysql查詢。我需要從我的表中的列Lat,Lng中獲取最後一個值,但是serial_number列需要不同。如何使用不同和限制在一起

如何進行這樣的查詢?

這是需要的,因爲我使用此座標將其加載到Google地圖。因此,當Google地圖加載時,我需要在車輛的每個最後座標上都有一個標記。

+0

什麼是「我需要得到最後的經緯度」...? –

+0

是同一個表的serial_numer字段嗎?如果你在問題中定義結構 – neeraj

+0

是的,那麼它會更好....... –

回答

1
SELECT m.* 
FROM (
     SELECT DISTINCT serial_number 
     FROM mytable 
     ) md 
JOIN mytable m 
ON  m.id = 
     (
     SELECT id 
     FROM mytable mi 
     WHERE mi.serial_number = md.serial_number 
     ORDER BY 
       mi.time DESC, mi.id DESC 
     LIMIT 1 
     ) 

(serial_number, time, id)上創建一個索引,以便快速工作。

如果你想獲取一定SERIAL_NUMBER最後一個記錄,只要使用此:

SELECT * 
FROM mytable 
WHERE serial_number = :my_serial_number 
ORDER BY 
     time DESC, id DESC 
LIMIT 1 
+0

嗨你的代碼真的爲我工作。但我有一個問題。我如何從某個不在此表中的其他表中獲取用戶名。例如:該表有一個'user_code',它與我想從中獲取用戶名的另一個表中的列相同。像這張表'm'我們有'm.user_code = b.user_code',在第一個選擇中我會有一個'b.Name'如何做到這一點? –

+0

你能幫我嗎?我真的需要幫助,這是一分鐘 –

+0

@ denonth:請將你的問題作爲一個單獨的問題發佈,當我有一些時間時我會看。 – Quassnoi

-1

試試這個

select distinct serial_number, * 
from table t 
inner join table t1 on t1.serial_number = t.serial_number and t1.id = (select max id from table t2 where t2.serial_number = t1.serial_number) 
0

1# 假設最大ID將永遠給你最後LAT和lon,查詢變得相當簡單 -

SELECT t2.* 
FROM table t2 
where t2.id IN 
(
    SELECT max(t1.id) 
    FROM table t1 
    GROUP BY t1.serial_number 
) 

2# 如果您還需要考慮時間,那麼您將需要這樣做。這裏,在內部查詢中,獲得每個serial_number的max_time。然後,此max_time和serial_number分別與外部表格時間和serial_number連接,以獲取最後一個lat和lon的不同記錄。

SELECT * 
FROM table t2, 
(
    SELECT max(t1.time) max_time, t1.serial_number 
    FROM table t1 
    GROUP BY t1.serial_number 
) new_table 
WHERE t2.time=new_table.max_time 
AND t2.serial_number=new_table.serial_number 
相關問題