2017-06-20 156 views
0

在我的表格中,我使用了不同网络中的巴士乘车 - 每个记录代表一次乘车。在计数和分组后查找每个ID的最大值

我的目标是找到一天中的每个网络在采取游乐设施的最大数量和日发生游乐设施的最大数量 - 这需要先计算每个网络中每天乘坐的人数,然后取每个网络的最大计数 - 最终我将有三列 -

YMD - max_count - network_id

我曾尝试使用下面的查询,但我不知道在哪里或如何包括max()功能。有什么建议么?

SELECT DISTINCT ON (network_id) 
      network_id, count(*), to_char(start_time, 'YYYY-MM-DD') as YMD 
    FROM routes 
    ORDER BY network_id, count DESC, YMD; 

回答

0

我会使用汇总查询来算,每天乘坐的人数,然后开窗rank打电话找最乘车日期:

SELECT network_id, cnt, ymd 
FROM (SELECT network_id, 
       ymd, 
       cnt, 
       RANK() OVER (PARTITION BY network_id ORDER BY cnt DESC) AS rk 
     FROM (SELECT network_id, 
         TO_CHAR(start_time, 'YYYY-MM-DD') AS ymd, 
         COUNT(*) AS cnt 
       FROM routes 
       GROUP BY network_id, TO_CHAR(start_time, 'YYYY-MM-DD') 
       ) t 
     ) s 
WHERE rk = 1 
+0

感谢,但这将引发错误:'错误:语法错误在或接近“t”' –

+0

@ the_darkside我错过了'''在那里,谢谢。编辑我的答案来解决这个问题。 – Mureinik