2017-06-20 115 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