Maison  >  Questions et réponses  >  le corps du texte

Comment obtenir les deux premières entrées de chaque jour de la semaine dans MySql 5.5.34

<p>J'ai une table MySQL avec les colonnes <strong>TENANT_NAME</strong>, <strong>MAX_CALLS</strong> et <strong>TIME_STAMP</strong> /strong> , sur demande, nous insérons des données toutes les heures et le même nom peut être répété. </p> <p>Maintenant, je souhaite obtenir les noms de groupes que je dois ajouter ainsi que la somme des appels et obtenir les 2 premières entrées pour chaque jour de la semaine. </p> <p>Par exemple : 22:49 Insérer des données</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</pré> <p>Heure suivante 23h49</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</pré> <p>De cette façon, j'ai 1 an de données</p> <p>Maintenant, je souhaite résumer le groupe de noms de 2 enregistrements pendant une semaine chaque jour</p> <p>Comme ça</p> <pre class="brush:php;toolbar:false;">RS1, 35, LUN RS3, 22, LUN... ainsi de suite RS4, 40, DIM RS2, 35, SOLEIL≪/pré> <p>J'ai essayé cette requête et j'ai pu regrouper par nom et nombre total d'appels et afficher DAYNAME, mais je veux les 2 premiers enregistrements pour chaque jour de la semaine. </p> <pre class="brush:php;toolbar:false;">sélectionnez a.TENANT_NAME,SUM(a.MAX_CALLS),DAYNAME(a.TIME_STAMP) de TENANT_LIC_DISTRIBUTION AS un groupe par a.TENANT_NAME,day(a.TIME_STAMP ) commande par a.MAX_CALLS,a.TIME_STAMP ; RS1, 35, LUN RS3, 22, LUN RS2, 10, LUN RS3, 30, MAR RS2, 20, MAR RS1, 10, MAR.... ainsi de suite RS1, 20, DIM RS2, 10, DIM RS3, 1, SOLEIL≪/pré> <p>Je veux l'obtenir comme ça</p> <pre class="brush:php;toolbar:false;">RS1, 35, LUN RS3, 22, LUN RS3, 30, MAR RS2, 20, MAR.... ainsi de suite RS1, 20, DIM RS2, 10, SOLEIL</pré> <p>S'il vous plaît, aidez-moi</p> <p>Merci</p>
P粉676588738P粉676588738390 Il y a quelques jours488

répondre à tous(1)je répondrai

  • P粉466643318

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

    Essayez d'utiliser les fonctions de fenêtreautour de la requête globale pour ajouter des numéros de ligne, puis limiter par numéro de ligne. C'est une façon.

    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;

    répondre
    0
  • Annulerrépondre