这是我在这里提出的问题的轻微变体 SQL Query for getting maximum value from a column
我有一个包含以下数据的人员表和活动表
-人-----
------活动------------
我已经在数据库中获得了有关用户在特定活动上花费时间的数据。
我打算在每个用户都花了最大时间后才获取数据。
我的查询是
Select p.Id as 'PersonId',
p.Name as 'Name',
act.HoursSpent as 'Hours Spent',
act.Date as 'Date'
From Person p
Left JOIN (Select MAX(HoursSpent), Date from Activity
Group By HoursSpent, Date) act
on act.personId = p.Id
但是它为我提供了Person的所有行,而不是最大花费的小时数。 这应该是我的结果。
答案 0 :(得分:2)
您的查询有几个问题:
activity
引入 other 列。您可以采用这种方法-join
和group by
,但需要两个联接:
select p.*, a.* -- the columns you want
from Person p left join
activity a
on a.personId = p.id left join
(select personid, max(HoursSpent) as max_hoursspent
from activity a
group by personid
) ma
on ma.personId = a.personId and
ma.max_hoursspent = a.hoursspent;
请注意,这可以为给定的人返回重复项-如果存在最大的并列关系。
这是用row_number()
通俗地写的:
select p.*, a.* -- the columns you want
from Person p left join
(select a.*,
row_number() over (partition by a.personid order by a.hoursspent desc) as seqnum
from activity a
) a
on a.personId = p.id and a.seqnum = 1
ma.max_hoursspent = a.hoursspent;