我有一个类似于这个view_1的视图
id Office Begin_dt Last_dt Days
1 Office1 2019-09-02 2019-09-08 6
1 Office2 2019-09-09 2019-09-30 21
1 Office1 2019-10-01 2019-10-31 30
5 Office3 2017-10-01 2017-10-16 15
5 Office2 2017-10-17 2017-10-30 13
5 Office2 2017-11-01 2017-11-31 30 我想找到员工最多停留一段时间的办公室。
预期产出
id Office Days
1 Office1 36
5 Office2 43所以,我在办公室里花了6天和30天,总共36天。他在办公室里花的时间最多。
id 5的任期分别为13天和30天,43天。最多的时间花在办公室2
到目前为止
select id, max(sum(Days)), Office from view_1
group by id错误:不能对包含聚合或子查询的表达式执行聚合函数。
发布于 2020-08-10 14:29:53
您可以在子查询中使用窗口函数和聚合:
select v.*
from (select v.id, v.office, sum(days) as days,
row_number() over (partition by id order by sum(days) desc) as seqnum
from view_1 v
group by id, office
) v
where seqnum = 1;请注意,如果id的时间最多,则会选择任意的最大行(这可能会在运行期间发生变化)。
发布于 2020-08-10 14:30:59
错误告诉了你问题。您需要使用子查询或CTE。
子查询:
SELECT id,
MAX(DaysSums) AS MaxDaysSum,
office
FROM (SELECT id,
SUM(Days) AS DaysSum,
office
FROM view_1
GROUP BY id,
office) V
GROUP BY id,
office;CTE:
WITH Sums AS
(SELECT id,
SUM(Days) AS DaysSum,
office
FROM view_1
GROUP BY id,
office)
SELECT id,
MAX(DaysSum) AS DaysSumMax,
office
FROM Sums
GROUP BY id, office;https://stackoverflow.com/questions/63342200
复制相似问题