[英]how to get top 2 entries from each day in a week in MySql 5.5.34
我有一個 MySQL 表,其中包含TENANT_NAME 、 MAX_CALLS和TIME_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.