0

我有以下 SQL 选择语句

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

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

有什么想法我该怎么做?

谢谢

4

5 回答 5

2
Select top 1 first_name, year 
from users 
where username ='$username' 
order by year desc
于 2013-01-25T14:49:07.597 回答
1

您可以找到用户的最大年份,然后将其嵌套,以便您只选择具有该年份的一条记录。

SELECT first_name, year FROM users U1 WHERE username='$username'
 and year = (select max(year) FROM users U2 WHERE U1.username=U2.username)
于 2013-01-25T14:53:29.337 回答
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
于 2013-01-25T14:49:01.000 回答
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;

您可以根据需要向结果中添加任意数量的列,但您需要在内部和外部查询中执行此操作。

于 2013-01-25T15:06:21.757 回答
0

PostgreSQL 最简单的形式:

SELECT first_name, year
FROM   users
WHERE  username = '$username'
ORDER  BY year DESC
LIMIT  1;
于 2013-01-25T17:06:21.443 回答