我有一张看起来像这样的表。
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
我不知道如何在几次查询后得不到我想要的内容。这会是什么样的?谢谢!
答案 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
是表格的名称