我有一个mysql表,其中包含用户订阅的所有计划。 我正在尝试创建一个SELECT语句,允许我从表中选择特定用户。此外,如果该用户有重复的条目,它将获得所有的最新日期。
例如,我想从表中寻找约翰,我应该得到的日期是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语句?
答案 0 :(得分:1)
如果您只需要第一个,可以将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`
答案 1 :(得分:0)
试试这个
SELECT FirstName, max(Date) FROM yourTable
WHERE FirstName = 'John'
您也可以使用group by
为所有人提供结果John
答案 2 :(得分:0)
如果您想为所有用户执行此操作:
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;
答案 3 :(得分:0)
查询所需的输出:
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
答案 4 :(得分:0)
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;