来自重复项的最高值的SQL查询

时间:2017-06-28 23:16:03

标签: sql

我有一张看起来像这样的表。

username | vendor | time
-------------------------
x        |  a     | 10
x        |  b     | 11
x        |  c     | 12
y        |  a     | 9
y        |  c     | 14 

我想在其用户名中提取时间值最高的行,所以它应该如下所示:

username | vendor | time
-------------------------
x        |  c     | 12
y        |  c     | 14 

我不知道如何在几次查询后得不到我想要的内容。这会是什么样的?谢谢!

3 个答案:

答案 0 :(得分:1)

此代码与数据库无关:

SELECT username, vendor, MAX(time)
FROM foo
WHERE vendor = 'c'
GROUP BY username, vendor;

如果是我,我会想要使用分析功能(个人偏好,真的)。 MS SQL Server和Oracle都支持此功能:

SELECT username, vendor, MAX(time) OVER (PARTITION BY username, vendor)
FROM foo
WHERE vendor = 'c';

这是SQL Fiddle

答案 1 :(得分:0)

您可以使用ANSI标准窗口函数row_number()

select t.*
from (select t.*,
             row_number() over (partition by username order by time desc) as seqnum
      from t
     ) t
where seqnum = 1;

答案 2 :(得分:0)

我不确定OP是否需要供应商过滤器,因此以下内容将为每个time以及链接的username获得最高vendor

这与Jacobm001做出相同的假设,即它是MySQL

select * from (select username, vendor, time from foo order by time desc) as t
group by username

foo是表格的名称

SQL Fiddle