【问题标题】:Find maximum value from specific column and group by them after that从特定列中找到最大值,然后按它们分组
【发布时间】:2021-04-06 11:56:35
【问题描述】:

我有一张这样的桌子:

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

我想按小时按此记录分组。然后在一小时内从商店 z-10 和 z-11 中找到 app-a 和 app-b 的最大事件(event_counts)值。实际上会有更多的商店和应用程序。我试过这个查询:

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
 

【问题讨论】:

    标签: sql postgresql count aggregate-functions greatest-n-per-group


    【解决方案1】:

    如果您想要每个应用程序/存储元组的高峰时间,您可以像这样使用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
    

    Demo on DB Fiddle

    应用 |商店 |事件计数 |小时 :------------ | :---- | ----------: | :----------------- 应用-a | z10 | 4 | 2020-09-02 08:00:00 应用-a | z11 | 3 | 2020-09-02 08:00:00 应用-b | z10 | 3 | 2020-09-02 10:00:00 应用-b | z11 | 2 | 2020-09-02 13:00:00

    【讨论】:

    • 它没有给我预期的结果,@GMB。我想要每个应用程序和每个商店的最大每小时事件数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 2021-11-28
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多