Entfernen Sie doppelte Zeilen und behalten Sie nur die neuesten Arbeitsprotokolleinträge
P粉916760429
2023-08-10 17:25:56
<p>Ich habe diese Abfrage erstellt und sie funktioniert. Das Problem besteht darin, dass für jedes Jobprotokoll Zeilen angezeigt werden. Ich benötige lediglich das aktuelle Arbeitsprotokoll für jedes Ereignis. </p>
<pre class="brush:php;toolbar:false;">SELECT DISTINCT
„HPD:Help Desk“. „Incident Number“ AS Incident_Number,
„HPD:Helpdesk“. „Status“ AS-Status,
„HPD:Help Desk“. „Priorität“ AS-Priorität,
„HPD:Help Desk“. „Zugewiesene Gruppe“ AS Assigned_Group,
„HPD:Help Desk“. „Beauftragter“ AS Beauftragter,
`HPD:Help Desk`.`Submit Date` AS Submit_Date,
„HPD:Help Desk“. „Datum der letzten Änderung“ AS Last_Modified_Date,
`HPD:Help Desk`.`Description` AS Beschreibung,
`HPD:Help Desk`.`Submitter` AS Submitter,
`HPD:Search-Worklog`.`Worklog Description` AS Worklog_Description,
„HPD:Search-Worklog“. „Arbeitsprotokoll-ID“ AS Work_Log_ID
AUS
„HPD:Helpdesk“.
INNER JOIN `HPD:Search-Worklog` auf (`HPD:Search-Worklog`.`InstanceId` = `HPD:Help Desk`.`InstanceId`)
WO
(„HPD:Help Desk“. „Status“ in („Zugewiesen“, „Ausstehend“, „In Bearbeitung“)
Und `HPD:Help Desk`.`Submit Date` >= $__from/1000 und `HPD:Help Desk`.`Submit Date` <= $__to/1000)
SORTIEREN NACH
„HPD:Helpdesk“. „Einreichdatum“ ASC
LIMIT 20</pre>
<p>Ich habe die Formulare HPD:Help Desk, HPD:Worklog und HPD:Search-Worklog ausprobiert. Ich habe auch versucht, mit einer CASE-Anweisung einfach die neueste/maximale Arbeitsprotokoll-ID für jedes Ereignis anzuzeigen, ohne Erfolg. Ich bin mir sicher, dass mir etwas Offensichtliches/Einfaches fehlt. </p>
假设使用支持窗口函数的最新版本的MySQL(或其变体),获取“最新”的一种非常有效的方法是使用
row_number() over()
。在over子句中使用partition by
来控制什么会触发行编号重置,并使用order by
来控制分区中获得行号1的行。现在,要获取“最新”的需要在worklog表中有一列来实现这个功能 - 我假设有一个时间戳列(worklog_entry_date
存在于该表中(worklog_entry_date
),您需要替换实际确定“最新”的列)。将当前查询嵌套一层,以便您可以过滤行号为1的情况 - 这些将是“最新”的行:注意:当行编号存在时,您不需要使用
select distinct
- 一般情况下尽量避免使用它。此外,请自己使用表别名来简化代码。