Sql 每个记录的平均值以及5个最大值
对于此示例数据:Sql 每个记录的平均值以及5个最大值,sql,database,db2,Sql,Database,Db2,对于此示例数据: First Name | Last Name | Count | datetime ---------------------------------------------------- John | Mac | 5 | 2019-07-09 01:00:01 Drew | G | 6 | 2019-07-09 01:01:01 John | Mac | 10 | 2019-07
First Name | Last Name | Count | datetime
----------------------------------------------------
John | Mac | 5 | 2019-07-09 01:00:01
Drew | G | 6 | 2019-07-09 01:01:01
John | Mac | 10 | 2019-07-09 01:11:01
John | Mac | 15 | 2019-07-09 01:12:01
John | Mac | 16 | 2019-07-09 01:13:01
John | Mac | 2 | 2019-07-09 01:14:01
Drew | G | 16 | 2019-07-09 01:03:01
Drew | G | 26 | 2019-07-09 01:08:01
Drew | G | 8 | 2019-07-09 02:01:01
Drew | G | 10 | 2019-07-09 05:01:01
Drew | G | 11 | 2019-07-09 08:01:01
我可以使用此查询获取按日期分组的每个人的平均计数:
SELECT firstname, lastname, date(datetime), avg(count)
from table
where date(datetime) between '2019-07-08' and '2019-07-08'
group by firstname, lastname, date(datetime)
如何编写查询以包含每个名称、日期组合的五个最高计数?我希望产生如下输出:
First Name | Last Name | Avg_count| date | max1 | max1_datetime | max2 | max2_datetime | max 3 | max3_datetime | max4 | max4_datetime | max5 |max5_ datetime
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
John | mac | 9 | 2019-07-09 | 16 | 2019-07-09 01:13:01 | 15 | 2019-07-09 01:12:01 | 10 | 2019-07-09 01:11:01 | 5 | 2019-07-09 01:00:01 | 2 | 2019-07-09 01:14:01
您可以使用条件聚合:
select firstname, lastname, date(datetime), avg(count),
max(case when seqnum = 1 then count end) as count_1,
max(case when seqnum = 1 then datetime end) as datetime_1,
max(case when seqnum = 2 then count end) as count_2,
max(case when seqnum = 2 then datetime end) as datetime_2,
max(case when seqnum = 3 then count end) as count_3,
max(case when seqnum = 3 then datetime end) as datetime_3,
max(case when seqnum = 4 then count end) as count_4,
max(case when seqnum = 4 then datetime end) as datetime_4,
max(case when seqnum = 5 then count end) as count_5,
max(case when seqnum = 5 then datetime end) as datetime_5
from (select t.*,
row_number() over (partition by firstname, lastname, date(datetime) order by count desc) as seqnum
from table t
where datetime >= '2019-07-08' and
datetime < '2019-07-09'
) t
group by firstname, lastname, date(datetime);
请注意,我还更改了日期比较。这使得使用索引更加兼容。…对于每个记录…-你们是什么意思?可读性修复和澄清问题。你们能在这里提供帮助吗