我有一個mysql查詢。我需要從我的表中的列Lat,Lng中獲取最後一個值,但是serial_number列需要不同。如何使用不同和限制在一起
如何進行這樣的查詢?
這是需要的,因爲我使用此座標將其加載到Google地圖。因此,當Google地圖加載時,我需要在車輛的每個最後座標上都有一個標記。
我有一個mysql查詢。我需要從我的表中的列Lat,Lng中獲取最後一個值,但是serial_number列需要不同。如何使用不同和限制在一起
如何進行這樣的查詢?
這是需要的,因爲我使用此座標將其加載到Google地圖。因此,當Google地圖加載時,我需要在車輛的每個最後座標上都有一個標記。
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
嗨你的代碼真的爲我工作。但我有一個問題。我如何從某個不在此表中的其他表中獲取用戶名。例如:該表有一個'user_code',它與我想從中獲取用戶名的另一個表中的列相同。像這張表'm'我們有'm.user_code = b.user_code',在第一個選擇中我會有一個'b.Name'如何做到這一點? –
你能幫我嗎?我真的需要幫助,這是一分鐘 –
@ denonth:請將你的問題作爲一個單獨的問題發佈,當我有一些時間時我會看。 – Quassnoi
試試這個
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)
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
什麼是「我需要得到最後的經緯度」...? –
是同一個表的serial_numer字段嗎?如果你在問題中定義結構 – neeraj
是的,那麼它會更好....... –