首頁  >  問答  >  主體

如何在MySql 5.5.34中取得每週每天的前兩個條目

<p>我有一個MySQL 表,其中包含<strong>TENANT_NAME</strong>、<strong>MAX_CALLS</strong>TENANT_NAME</strong>、<strong>MAX_CALLS</strong> 和<strong>TIME_STAMP</strong> 列,並且< 和<strong>TIME_STAMP</strong> 列,且< </strong> ,根據要求,我們每小時插入數據,並且相同的名稱可以重複。 </p> <p>現在我想取得需要新增群組名稱和求和呼叫並取得一週內每天的前 2 個條目。 </p> <p>例如:22:49 插入資料</p> <pre class="brush:php;toolbar:false;">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</pre> <p>下一小時 23:49</p> <pre class="brush:php;toolbar:false;">RS1, 15, 2022-12-07 23:49:17 RS2, 0, 2022-12-07 23:49:17 RS3, 20, 2022-12-07 23:49:17</pre> <p>這樣,我就有了1年的數據</p> <p>現在我想要每天總結一週的 2 筆記錄的名稱群組</p> <p>像這樣</p> <pre class="brush:php;toolbar:false;">RS1, 35, MON RS3, 22, MON... so on RS4, 40, SUN RS2, 35, SUN</pre> <p>我嘗試了這個查詢,我能夠對姓名和總呼叫進行分組,並顯示 DAYNAME,但我想要一周內每天的前 2 條記錄。 </p> <pre class="brush:php;toolbar:false;">select a.TENANT_NAME,SUM(a.MAX_CALLS),DAYNAME(a.TIME_STAMP) from TENANT_LIC_DISTRIBUTION AS a group by a.TENANT_NN,day(a.TIME_AMP ) 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</pre> <p>我想像這樣取得</p> <pre class="brush:php;toolbar:false;">RS1, 35, MON RS3, 22, MON RS3, 30, TUE RS2, 20, TUE.... so on RS1, 20, SUN RS2, 10, SUN</pre> <p>請幫我</p> <p>謝謝</p>
P粉676588738P粉676588738390 天前484

全部回覆(1)我來回復

  • P粉466643318

    P粉4666433182023-09-04 12:55:52

    嘗試使用視窗函數圍繞聚合查詢附加行號,然後按行號進行限制。這是一種方法。

    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;

    回覆
    0
  • 取消回覆