OTRS Select Anweisungen verbinden

darti

Benutzer
Beiträge
11
Hallo allerseits,

Wir möchten in unserer Firma die Reports unseres OTRS Ticket System gerne mit Jasper erstellen. Ich habe dafür mal die SQL Anweisungen der internen Reports von OTRS geloggt. Als Beispiel habe ich hier die Bearbeitungsdauer von Tickets über einen bestimmten Zeitraum.

Die erste Ausgabe sucht die entsprechenden Tickets für den Zeitraum heraus.
Code:
SELECT DISTINCT st.id, st.tn, st.create_time_unix
FROM ticket st
INNER JOIN queue sq ON sq.id = st.queue_id
WHERE 1 =1
AND st.queue_id
IN ( 35 )
AND st.ticket_priority_id
IN ( 3 )
AND st.create_time_unix <=1430431199
AND st.create_time_unix >=1427839200
ORDER BY st.create_time_unix DESC
LIMIT 100000000

Die zweite Anweisung berechnet die Bearbeitungsdauer der herausgesuchten Tickets:
Code:
SELECT SUM( time_unit )
FROM time_accounting
WHERE ticket_id
IN ( 31490, 31483, 31482, 31446, 31398, 31211, 30996, 30973, 30942, 30941, 30935, 30555, 30421, 30359, 30166, 30080, 29963, 29896, 29403, 29377 )

Wie zu sehen ist, sucht OTRS intern schon die Ticket ids heraus und setzt sie in die Anweisung ein. Wie kann ich das lösen, dass dies in einer Anweisung geschieht ohne entsprechenden Zwischenschritt. Ich habe gerade erst angefangen mich mit Datenbanken und SQL auseinander zu setzen. Ich gehe mal aus, dass das über JOIN funktioniert, weiss aber nicht wie.

Danke schon mal im voraus.
 
Zuletzt bearbeitet von einem Moderator:
Werbung:
Wie kann ich das lösen, dass dies in einer Anweisung geschieht ohne entsprechenden Zwischenschritt.

Ich kenne die Strukturen der Tabellen nicht, prinzipiell über die ID ein left join, dabei im select das sum() einbauen und über alle anderen Spalten aggregieren.
Allerdings solltest Du dann im Select-Teil vielleicht auch nur die Ticket-ID neben der Summierung haben - sonst erkennt MySQL zwar den Fehler nicht, liefert aber falsche Ergebnisse.
 
Danke für die Antwort. Hat mir nicht so direkt geholfen, es hat mich aber dazu gebracht hier nochmal nachzuschauen und mit den Informationen aus dem OTRS Output hat es funktioniert. Sieht jetzt so aus:

Code:
SELECT ticket.queue_id, SUM( time_accounting.time_unit )
FROM ticket
INNER JOIN time_accounting ON time_accounting.ticket_id = ticket.id
INNER JOIN queue ON queue.id = ticket.queue_id
WHERE ticket.queue_id
IN ( 35 )
AND ticket.create_time_unix <=1430431199
AND ticket.create_time_unix >=1427839200

Ich habe etwas rausgeschmissen, aber das Ergebnis ist genau was ich will. Eines hätte ich gerne anders. Ich hatte im OTRS einen festen Zeitraum eingestellt, hätte aber gerne, dass immer der letzte volle Kalendermonat genommen wird. Wie kann ich das realisieren?

Außerdem noch eine Verständnisfrage: In der ersten Query von OTRS ist der Parameter 'WHERE 1 =1'. Welche Bedeutung hat der? Ich habe meine Query auch mal mit getestet, aber das macht scheinbar keinen Unterschied.
 
Zuletzt bearbeitet von einem Moderator:
Kalendermonat: offenbar wissen die Jungs von OTRS nicht, daß es gescheiten Datentypen für Timestamps gibt. Damit wäre es trivial.
where 1=1 : beliebter Trick, um dann immer weitere Conditions dran zu hängen (and, or), so muß man sich um das einmalige Where nicht kümmern, das where 1=1 ist immer wahr und fest in der Abfrage eingelötet.
 
Werbung:
ps: deine Abfrage funktioniert nur korrekt, weil offenbar ticket.queue_id in PK ist. Gewöhn Dir an, nicht aggregierte Spalten zu gruppieren. Wir hatten das Thema erst gestern.
 
Zurück
Oben