簡體   English   中英

如何在 MySql 5.5.34 中獲取一周中每一天的前 2 個條目

[英]how to get top 2 entries from each day in a week in MySql 5.5.34

我有一個 MySQL 表,其中包含TENANT_NAMEMAX_CALLSTIME_STAMP列,並且沒有主鍵,根據我們每小時插入數據的要求,可以重復相同的名稱。

現在我想像需要添加組名和求和調用一樣獲取,並在一周內每天獲取前 2 個條目。

例如:數據在 22:49 插入

TENANT_NAME,MAX_CALLS,TIME_STAMP
RS1, 20, 2022-12-07 22:49:17
RS2, 10, 2022-12-07 22:49:17
RS3, 2, 2022-12-07 22:49:17

下一小時 23:49

RS1, 15, 2022-12-07 23:49:17
RS2, 0, 2022-12-07 23:49:17
RS3, 20, 2022-12-07 23:49:17

像這樣,我有 1 年的數據

現在我想每天匯總一周的名稱 2 條記錄

像這樣

RS1, 35, MON
RS3, 22, MON... so on
RS4, 40, SUN
RS2, 35, SUN

我嘗試了這個查詢,我能夠對姓名進行分組並對總通話進行求和,並顯示 DAYNAME 但我想要一周中每天的前 2 條記錄。

select a.TENANT_NAME,SUM(a.MAX_CALLS),DAYNAME(a.TIME_STAMP) from TENANT_LIC_DISTRIBUTION AS a group by a.TENANT_NAME,day(a.TIME_STAMP) order by a.MAX_CALLS,a.TIME_STAMP;

RS1, 35, MON
RS3, 22, MON
RS2, 10, MON

RS3, 30, TUE
RS2, 20, TUE
RS1, 10, TUE.... so on
RS1, 20, SUN
RS2, 10, SUN
RS3, 1, SUN

我想這樣取

RS1, 35, MON
RS3, 22, MON

RS3, 30, TUE
RS2, 20, TUE.... so on

RS1, 20, SUN
RS2, 10, SUN

請幫我

謝謝

嘗試在聚合查詢周圍使用window function到 append 行號,然后按行號限制。 這是一種方法。

WITH rank_tenant
AS (
    SELECT TENANT_NAME, 
    DAY, 
    CALLS, 
    row_number() OVER (
            PARTITION BY TENANT_NAME 
            ORDER BY CALLS DESC
            ) AS row_num
    FROM (select 
          TENANT_NAME,
          DAYNAME(TIME_STAMP) as DAY,
          SUM(MAX_CALLS) as CALLS
          from TENANT_LIC_DISTRIBUTION
          group by TENANT_NAME, DAY) as t1
    )
SELECT TENANT_NAME,
    DAY,
    CALLS
FROM rank_tenant
WHERE row_num <= 2;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM