我有以下SQL select语句
SELECT first_name, year FROM users WHERE username='$username'
这可以返回许多结果,因为每年可以存在用户记录,例如一个用于2012年,2011年等。因此,我只想从用户记录所在的最近一年中获取用户的详细信息。
我有什么想法可以做到这一点?
由于
答案 0 :(得分:2)
Select top 1 first_name, year
from users
where username ='$username'
order by year desc
答案 1 :(得分:1)
您可以找到用户的最长年份,然后将其嵌套,以便您只选择该年份的一条记录。
SELECT first_name, year FROM users U1 WHERE username='$username'
and year = (select max(year) FROM users U2 WHERE U1.username=U2.username)
答案 2 :(得分:0)
<强>的MySQL 强>
SELECT first_name,MAX(year) FROM users WHERE username = 'username'
除此之外,你必须添加GROUP BY
条款。
SELECT first_name,MAX(year)
FROM users
WHERE username = 'username'
GROUP BY username
答案 3 :(得分:0)
有几种方法可以做到这一点:
如果您只需要一个用户,那么Avitus的回答(使用LIMIT而不是TOP调整为Postgres)可能是最好的。请注意,如果用户具有多个具有相同“最高”年份的行,您将只看到一行。可能这没关系,如果没有,以下解决方案可以解决这个问题。
如果在单个语句中需要多个用户,这样的事情可能比使用来自user1988097的共同相关子查询更快,因为只需要对表进行一次扫描。
select first_name,
year
from (
select first_name,
year,
max(year) over (partition by username) as max_year
from users
) t
where year = max_year;
您可以根据需要为结果添加任意数量的列,但您需要在内部和外部查询中执行此操作。
答案 4 :(得分:0)
PostgreSQL的最简单形式:
SELECT first_name, year
FROM users
WHERE username = '$username'
ORDER BY year DESC
LIMIT 1;