Supprimez les lignes en double et conservez uniquement les dernières entrées du journal de travail
P粉916760429
2023-08-10 17:25:56
<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>
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 :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.