SQL select语句 - 返回字段的最大数值

时间:2013-01-25 14:47:38

标签: sql postgresql select

我有以下SQL select语句

SELECT first_name, year FROM users WHERE username='$username'

这可以返回许多结果,因为每年可以存在用户记录,例如一个用于2012年,2011年等。因此,我只想从用户记录所在的最近一年中获取用户的详细信息。

我有什么想法可以做到这一点?

由于

5 个答案:

答案 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;