![]() |
Datenbank: MySql • Version: 5.0.38 • Zugriff über: SQL
[MySql] Optimierung einer Abfrage
Hallo Alle,
ich habe zu Auswertung von Supportfällen eine Abfrage erstellt. Dabei soll das Erledigungsdatum eines Vorgangs mit ausgegeben werden. Es gibt aber das Problem, dass ein Vorgang wiedereröffnet und erneut erledigt werden kann. Es soll die Duplizerung verhindert und nur die jüngste Erledigung ausgewertet werden. Momentan mach ich das so:
SQL-Code:
Gibt es eine elegantere und performantere Variante zu dieser Subquery ?
select bugs.id,
projects.name as Projekt, reporter.username as Reporter, bearbeiter.username as "Bearbeitung durch", bugs.date_submitted as Meldungsdatum, bugs.last_updated as Aktualisiert, bugs.summary as Zusammenfassung, bugs.status, history.date_modified as Erledigt, abrechnung.value as abrechnung, cast(replace(mannstunden.value, ',', '.') as DECIMAL) as Aufwand from mantis_bug_table bugs left outer join mantis_project_table projects on projects.id = bugs.project_id left outer join mantis_custom_field_string_table abrechnung on abrechnung.field_id = 2 and abrechnung.bug_id = bugs.id left outer join mantis_custom_field_string_table mannstunden on mannstunden.field_id = 1 and mannstunden.bug_id = bugs.id left outer join mantis_user_table reporter on reporter.id = bugs.reporter_id left outer join mantis_user_table bearbeiter on bearbeiter.id = bugs.handler_id left outer join mantis_bug_history_table history on history.bug_id = bugs.id and history.field_name = 'status' and history.new_value = '80' and /* Durch diese Subquery wird sichergestellt, dass nur der neueste Eintrag gejoined wird */ history.id = (select max(id) from mantis_bug_history_table where bug_id = bugs.id and field_name = 'status' and new_value = '80') |
Re: [MySql] Optimierung einer Abfrage
Nachdem ich mir deine Anweisung erstmal ordentlich formatiert hatte, um sie zu verstehen (ich weiss einfach nicht wieso ihr eure Anweisungen hier immer einfach zu hinklascht) und ich die Prefixreihenfolge bei den LEFT-JOINs korrigiert hatte, sehe ich keine Verbesserungsmöglichkeiten.
Da ich meine Mühe jetzt nicht so verpuffen lassen wollte, hier mal eine formatierte SQL-Anweisung...
SQL-Code:
Gruss
SELECT bugs.id,
projects.name AS Projekt, reporter.username AS Reporter, bearbeiter.username AS "Bearbeitung durch", bugs.date_submitted AS Meldungsdatum, bugs.last_updated AS Aktualisiert, bugs.summary AS Zusammenfassung, bugs.status, history.date_modified AS Erledigt, abrechnung.value AS abrechnung, CAST(REPLACE(mannstunden.value, ',', '.') AS DECIMAL) AS Aufwand FROM mantis_bug_table bugs LEFT JOIN mantis_project_table projects ON bugs.project_id = projects.id LEFT JOIN mantis_custom_field_string_table abrechnung ON abrechnung.field_id = 2 AND bugs.id = abrechnung.bug_id LEFT JOIN mantis_custom_field_string_table mannstunden ON mannstunden.field_id = 1 AND bugs.id = mannstunden.bug_id LEFT JOIN mantis_user_table reporter ON bugs.reporter_id = reporter.id LEFT JOIN mantis_user_table bearbeiter ON bugs.handler_id = bearbeiter.id LEFT JOIN mantis_bug_history_table history ON bugs.id = history.bug_id AND history.field_name = 'status' AND history.new_value = '80' AND history.id = (SELECT MAX(id) FROM mantis_bug_history_table WHERE bug_id = bugs.id AND field_name = 'status' AND new_value = '80') Thorsten |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz