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

Supprimez les lignes en double et conservez uniquement les dernières entrées du journal de travail

<p>J'ai créé cette requête et elle fonctionne. Le problème est qu'il affiche des lignes pour chaque journal de travail. J'ai juste besoin du dernier journal de travail pour chaque événement. </p> <pre class="brush:php;toolbar:false;">SELECT DISTINCT `HPD : Help Desk`.`Numéro d'incident` AS Incident_Number, `HPD : Help Desk`.`Statut` Statut AS, `HPD : Help Desk`.`Priorité` AS Priorité, `HPD : Help Desk`.`Groupe attribué` AS Groupe_assigné, `HPD : Help Desk`.`Cessionnaire` AS Cessionnaire, `HPD : Help Desk`.`Date de soumission` AS Submit_Date, `HPD : Help Desk`.`Date de dernière modification` AS Last_Modified_Date, `HPD : Help Desk`.`Description` AS Description, `HPD : Help Desk`.`Auteur` AS Auteur, `HPD:Search-Worklog`.`Description du journal de travail` AS Worklog_Description, `HPD :Search-Worklog`.`ID du journal de travail` AS Work_Log_ID DEPUIS `HPD : Service d'assistance` INNER JOIN `HPD:Search-Worklog` sur (`HPD:Search-Worklog`.`InstanceId` = `HPD:Help Desk`.`InstanceId`) OÙ (`HPD : Help Desk`.`Statut` dans ('Attribué','En attente','En cours') Et `HPD:Help Desk`.`Date de soumission` >= $__from/1000 et `HPD:Help Desk`.`Submit Date` <= $__to/1000) COMMANDÉ PAR `HPD : Help Desk`.`Date de soumission` ASC LIMITE 20</pré> <p>J'ai essayé les formulaires HPD:Help Desk, HPD:Worklog et HPD:Search-Worklog. J'ai également essayé d'utiliser une instruction CASE pour afficher simplement l'ID du journal de travail le plus récent/maximum pour chaque événement, sans succès. Je suis sûr qu'il me manque quelque chose d'évident/simple. </p>
P粉916760429P粉916760429460 Il y a quelques jours642

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

  • P粉252423906

    P粉2524239062023-08-11 12:45:29

    En supposant que vous utilisez une version récente de MySQL (ou une variante de celle-ci) qui prend en charge les fonctions de fenêtre, un moyen très efficace d'obtenir "la dernière" est d'utiliser row_number() over()。在over子句中使用partition by来控制什么会触发行编号重置,并使用order by来控制分区中获得行号1的行。现在,要获取“最新”的需要在worklog表中有一列来实现这个功能 - 我假设有一个时间戳列(worklog_entry_date存在于该表中(worklog_entry_date) où vous devez remplacer la colonne qui détermine réellement "la dernière"). Imbibez la requête actuelle d'un niveau afin de pouvoir filtrer la ligne numéro 1 - ce seront les "dernières" lignes :

    SELECT
        *
    FROM (
        SELECT
              h.`Incident Number` AS Incident_Number
            , h.`Status` AS STATUS
            , h.`Priority` AS Priority
            , h.`Assigned Group` AS Assigned_Group
            , h.`Assignee` AS Assignee
            , h.`Submit Date` AS Submit_Date
            , h.`Last Modified Date` AS Last_Modified_Date
            , h.`Description` AS Description
            , h.`Submitter` AS Submitter
            , w.`Worklog Description` AS Worklog_Description
            , w.`Work Log ID` AS Work_Log_ID
            , row_number() over(partition by h.`Incident Number`
                                order by w.worklog_entry_date DESC) as rn
        FROM `HPD: HELP Desk` h
        INNER JOIN `HPD: Search - Worklog` w ON w.`InstanceId` = h.`InstanceId`
        WHERE h.`Status` IN ('Assigned', 'Pending', 'In Progress')
            AND h.`Submit Date` >= $_ _from / 1000
            AND h.`Submit Date` <= $_ _to / 1000
        ) d
    WHERE d.rn = 1
    ORDER BY
          d.`Submit Date` ASC 
    LIMIT 20

    Remarque : vous n'avez pas besoin d'utiliser select distinct lorsque la numérotation des lignes est présente - essayez d'éviter de l'utiliser en général. Utilisez également vous-même les alias de table pour simplifier votre code.

    répondre
    0
  • Annulerrépondre