[英]Get the latest data of duplicated entries in MYSQL
我有一個mysql表,其中包含用戶的所有預訂計划。 我正在嘗試創建一個SELECT語句,該語句將允許我從表中選擇特定用戶。 同樣,如果該用戶有重復的條目,它將獲得所有的最新日期。
例如,我想從表中查找John,我應該得到的日期是2015-09-10。
Subscribed table
ID FirstName Date
-------------------------------
1 John 2015-05-30
2 Mary 2014-01-10
3 John 2015-09-10
4 John 2015-03-15
5 Loen 2013-12-11
我應該如何在結果上方創建SELECT語句?
如果只需要第一個,則可以將LIMIT
與ORDER BY
結合使用:
SELECT * FROM `Subscribed`
WHERE `FirstName` = 'John' -- Get the name John.
ORDER BY `Date` DESC -- Sort results in descending order by Date.
LIMIT 1 -- Limit the results to one.
結果將按日期降序排列,並且LIMIT 1
給出第一行。
確切地說,如果需要多個行,也可以使用分組功能。
SELECT `FirstName`, MAX(`Date`) FROM `Subscribed`
WHERE `FirstName` = 'John'
GROUP BY `FirstName`
嘗試這個
SELECT FirstName, max(Date) FROM yourTable
WHERE FirstName = 'John'
您也可以使用group by
為所有人獲取結果,而不僅僅是John
如果要對所有用戶執行此操作:
select s.*
from subscribed s join
(select firstname, max(date) as maxd
from subscribed
group by firstname
) ss
on ss.firstname = s.firstname and ss.maxd = s.date;
查詢所需的輸出:
SELECT * FROM (SELECT * FROM `Subscribed`
ORDER BY `DATE` DESC) t group by firstName
或者,您可以使用MAX和GROUP BY
SELECT firstName, MAX(date) FROM `Subscribed`
group by firstName
在此處驗證輸出: http : //www.sqlfiddle.com/#!9/ec5d1/1
輸出:
id firstName date
3 John September, 10 2015 00:00:00
2 Mary January, 10 2014 00:00:00
Gordeon Linoff有一個很好的答案,如果您的ID是主鍵並且總是按時增長,則可以執行以下SQL以獲得更快的速度:
SELECT s.*
FROM subscribed s,
(SELECT FirstName, max(ID) maxID FROM subscribed GROUP BY 1) AS ss
WHERE s.ID = ss.maxID;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.