Heim  >  Fragen und Antworten  >  Hauptteil

So erhalten Sie die ersten beiden Einträge jedes Wochentags in MySql 5.5.34

<p>Ich habe eine MySQL-Tabelle mit den Spalten <strong>TENANT_NAME</strong>, <strong>MAX_CALLS</strong> und <strong>kein Primärschlüssel </strong> /strong> , auf Anfrage fügen wir stündlich Daten ein und der gleiche Name kann wiederholt werden. </p> <p>Jetzt möchte ich die Gruppennamen, die ich hinzufügen muss, und die Summe abrufen und die beiden besten Einträge für jeden Tag der Woche erhalten. </p> <p>Zum Beispiel: 22:49 Daten einfügen</p> <pre class="brush:php;toolbar:false;">TENANT_NAME,MAX_CALLS,TIME_STAMP RS1, 20, 07.12.2022 22:49:17 RS2, 10, 07.12.2022 22:49:17 RS3, 2, 07.12.2022 22:49:17</pre> <p>Nächste Stunde 23:49</p> <pre class="brush:php;toolbar:false;">RS1, 15, 07.12.2022 23:49:17 RS2, 0, 07.12.2022 23:49:17 RS3, 20, 07.12.2022 23:49:17</pre> <p>Auf diese Weise habe ich 1 Jahr Daten</p> <p>Jetzt möchte ich die Namensgruppe von 2 Datensätzen für eine Woche jeden Tag zusammenfassen</p> <p>Gefällt mir</p> <pre class="brush:php;toolbar:false;">RS1, 35, MON RS3, 22, MON... und so weiter RS4, 40, SONNE RS2, 35, SUN</pre> <p>Ich habe diese Abfrage ausprobiert und konnte nach Name und Gesamtzahl der Anrufe gruppieren und DAYNAME anzeigen, aber ich möchte die beiden wichtigsten Datensätze für jeden Wochentag. </p> <pre class="brush:php;toolbar:false;">wählen Sie a.TENANT_NAME,SUM(a.MAX_CALLS),DAYNAME(a.TIME_STAMP) aus TENANT_LIC_DISTRIBUTION AS als Gruppe nach a.TENANT_NAME,day(a.TIME_STAMP aus ) Reihenfolge nach a.MAX_CALLS,a.TIME_STAMP; RS1, 35, MO RS3, 22, MO RS2, 10, MO RS3, 30, DI RS2, 20, DI RS1, 10, DIE.... und so weiter RS1, 20, SUN RS2, 10, SONNE RS3, 1, SUN</pre> <p>Ich möchte es so bekommen</p> <pre class="brush:php;toolbar:false;">RS1, 35, MON RS3, 22, MO RS3, 30, DI RS2, 20, DIE.... und so weiter RS1, 20, SUN RS2, 10, SUN</pre> <p>Bitte helfen Sie mir</p> <p>Vielen Dank</p>
P粉676588738P粉676588738390 Tage vor486

Antworte allen(1)Ich werde antworten

  • 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;

    Antwort
    0
  • StornierenAntwort