从特定列中查找最大值,然后按它们分组
Find maximum value from specific column and group by them after that
我有一个 table 这样的:
p_id | store | createdat | device | deviceserial | application
------+-------+---------------------+---------+--------------+-------------
| z10 | 2020-09-02 08:02:39 | android | 636363636890 | app-a
| z10 | 2020-09-02 08:08:18 | Android | 636363636890 | app-a
| z10 | 2020-09-02 08:10:10 | Android | 636363636890 | app-a
| z10 | 2020-09-02 08:20:10 | Android | 636363636890 | app-a
| z10 | 2020-09-02 10:40:11 | IOS | 6625839827 | app-b
| z10 | 2020-09-02 10:45:11 | IOS | 6625839827 | app-b
| z10 | 2020-09-02 10:50:11 | IOS | 6625839827 | app-b
| z11 | 2020-09-02 08:47:10 | Android | 636363636891 | app-a
| z11 | 2020-09-02 08:55:10 | Android | 636363636891 | app-a
| z11 | 2020-09-02 08:59:10 | Android | 636363636891 | app-a
| z11 | 2020-09-02 13:01:11 | IOS | 6625839828 | app-b
| z11 | 2020-09-02 13:15:11 | IOS | 6625839828 | app-b
| z10 | 2020-09-02 12:03:10 | Android | 636363636890 | app-a
| z10 | 2020-09-02 12:09:10 | Android | 636363636890 | app-a
| z10 | 2020-09-02 12:12:10 | Android | 636363636890 | app-a
| z10 | 2020-09-02 15:15:11 | IOS | 6625839827 | app-b
| z10 | 2020-09-02 15:20:11 | IOS | 6625839827 | app-b
| z11 | 2020-09-02 10:25:10 | Android | 636363636891 | app-a
| z11 | 2020-09-02 10:35:10 | Android | 636363636891 | app-a
| z11 | 2020-09-02 16:39:11 | IOS | 6625839828 | app-b
我想按此记录分组 hourly.Then 在一小时内从商店 z-10 和 z-11 中找到 app-a 和 app-b 的最大事件 (event_counts) 值.实际上会有更多商店,applications.I 尝试使用此查询:
select distinct on (application)
application,
count(*) as event_count,
date_trunc('hour', createdat) as hr,store
from devices
group by application,hr, store
order by application, event_count desc
这就是我的结果:
application | event_count | hr store
--------------+-------------+---------------------+---------------------
app-a | 4 | 2020-09-02 08:00:00 |z10
app-b | 3 | 2020-09-02 10:00:00 |z10
我想达到这个结果:
application | event_count | hr store
--------------+-------------+---------------------+---------------------
app-a | 4 | 2020-09-02 08:00:00 |z10
app-b | 3 | 2020-09-02 10:00:00 |z10
app-a | 3 | 2020-09-02 08:00:00 |z11
app-b | 2 | 2020-09-02 13:00:00 |z11
如果您想要每个 application/store 元组的高峰时间,您可以像这样使用 distinct on
:
select distinct on (application, store)
application, store,
count(*) as event_count,
date_trunc('hour', createdat) as hr
from mytable
group by application, store, hr
order by application, store, event_count desc
application | store | event_count | hr
:---------- | :---- | ----------: | :------------------
app-a | z10 | 4 | 2020-09-02 08:00:00
app-a | z11 | 3 | 2020-09-02 08:00:00
app-b | z10 | 3 | 2020-09-02 10:00:00
app-b | z11 | 2 | 2020-09-02 13:00:00
我有一个 table 这样的:
p_id | store | createdat | device | deviceserial | application
------+-------+---------------------+---------+--------------+-------------
| z10 | 2020-09-02 08:02:39 | android | 636363636890 | app-a
| z10 | 2020-09-02 08:08:18 | Android | 636363636890 | app-a
| z10 | 2020-09-02 08:10:10 | Android | 636363636890 | app-a
| z10 | 2020-09-02 08:20:10 | Android | 636363636890 | app-a
| z10 | 2020-09-02 10:40:11 | IOS | 6625839827 | app-b
| z10 | 2020-09-02 10:45:11 | IOS | 6625839827 | app-b
| z10 | 2020-09-02 10:50:11 | IOS | 6625839827 | app-b
| z11 | 2020-09-02 08:47:10 | Android | 636363636891 | app-a
| z11 | 2020-09-02 08:55:10 | Android | 636363636891 | app-a
| z11 | 2020-09-02 08:59:10 | Android | 636363636891 | app-a
| z11 | 2020-09-02 13:01:11 | IOS | 6625839828 | app-b
| z11 | 2020-09-02 13:15:11 | IOS | 6625839828 | app-b
| z10 | 2020-09-02 12:03:10 | Android | 636363636890 | app-a
| z10 | 2020-09-02 12:09:10 | Android | 636363636890 | app-a
| z10 | 2020-09-02 12:12:10 | Android | 636363636890 | app-a
| z10 | 2020-09-02 15:15:11 | IOS | 6625839827 | app-b
| z10 | 2020-09-02 15:20:11 | IOS | 6625839827 | app-b
| z11 | 2020-09-02 10:25:10 | Android | 636363636891 | app-a
| z11 | 2020-09-02 10:35:10 | Android | 636363636891 | app-a
| z11 | 2020-09-02 16:39:11 | IOS | 6625839828 | app-b
我想按此记录分组 hourly.Then 在一小时内从商店 z-10 和 z-11 中找到 app-a 和 app-b 的最大事件 (event_counts) 值.实际上会有更多商店,applications.I 尝试使用此查询:
select distinct on (application)
application,
count(*) as event_count,
date_trunc('hour', createdat) as hr,store
from devices
group by application,hr, store
order by application, event_count desc
这就是我的结果:
application | event_count | hr store
--------------+-------------+---------------------+---------------------
app-a | 4 | 2020-09-02 08:00:00 |z10
app-b | 3 | 2020-09-02 10:00:00 |z10
我想达到这个结果:
application | event_count | hr store
--------------+-------------+---------------------+---------------------
app-a | 4 | 2020-09-02 08:00:00 |z10
app-b | 3 | 2020-09-02 10:00:00 |z10
app-a | 3 | 2020-09-02 08:00:00 |z11
app-b | 2 | 2020-09-02 13:00:00 |z11
如果您想要每个 application/store 元组的高峰时间,您可以像这样使用 distinct on
:
select distinct on (application, store)
application, store,
count(*) as event_count,
date_trunc('hour', createdat) as hr
from mytable
group by application, store, hr
order by application, store, event_count desc
application | store | event_count | hr :---------- | :---- | ----------: | :------------------ app-a | z10 | 4 | 2020-09-02 08:00:00 app-a | z11 | 3 | 2020-09-02 08:00:00 app-b | z10 | 3 | 2020-09-02 10:00:00 app-b | z11 | 2 | 2020-09-02 13:00:00