簡體   English   中英

獲取MYSQL中重復條目的最新數據

[英]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語句?

如果只需要第一個,則可以將LIMITORDER 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`

小提琴: http ://www.sqlfiddle.com/#!9 / ebb90 /1

嘗試這個

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM