Ich versuche, eine SQL-Abfrage zu schreiben, um eine Zusammenfassungszeile für die Aktionen zu generieren, die von einem bestimmten Benutzer in einem bestimmten Zeitraum ausgeführt werden. Ich habe die folgende relevante Tabellenstruktur:
Benutzer
audit_periods (kann verarbeitet werden, Versand, Pause, etc.)
audit_tasks
audit_task_types
Für jeden Benutzer für einen bestimmten Zeitraum möchte ich etwas wie die folgende Datenzeile erstellen:
users.id users.email time_spent_processing time_spent_shipping ... Anzahl_von_Scans Anzahl_Paletten
was berechnet würde, indem für jeden Benutzer herausgefunden wird:
Ich habe alle SQL-Tricks, die ich kenne (nicht viele), ausgeschöpft und habe etwa folgendes gefunden:
%Vor%Dies scheint jedoch funktional gleichbedeutend mit der Auswahl aller Prüfungsaufgaben zu sein. Ich habe auch einige Unterabfragen ausprobiert, aber ohne Erfolg. Genauer gesagt, erzeugt dies etwas wie (weniger wichtige Spalten überspringend):
%Vor%wenn ich will:
%Vor%Ich kann einfach alle audit_tasks für einen bestimmten Benutzer abrufen und sie in Code zusammenfassen, aber ich werde vielleicht Hunderttausende von audit_tasks über einen bestimmten Zeitraum abrufen, also muss es in SQL gemacht werden.
Nur um klar zu sein: Ich suche nach einer Abfrage, um eine Zeile pro Benutzer zu generieren, die zusammenfassende Daten enthält, die in den anderen drei Tabellen gesammelt wurden. Also möchte ich für jeden Benutzer wissen, wie viel Zeit er in jeder Art von Audit-Periode (3600 Sekunden Verarbeitung, 3200 Sekunden Versand usw.) verbracht hat und wie viele von jeder Audit-Aufgabe er ausgeführt hat (5 Scans, 10 Items) Palette usw.).
Ich denke, ich habe die Elemente einer Lösung, ich habe nur Schwierigkeiten, sie zusammenzufügen. Ich weiß genau, wie ich das in Ruby / Java / etc erreichen würde, aber ich glaube nicht, dass ich SQL gut genug verstehe, um zu wissen, welches Werkzeug mir fehlt. Brauche ich eine temporäre Tabelle? Eine Union? Irgendein anderes Konstrukt vollständig?
Jede Hilfe wird sehr geschätzt, und ich kann klären, ob das oben genannte Unsinn ist.
Sie müssen dies in zwei Kreuztabellenabfragen aufteilen, die Ihnen die Informationen über audit_periods nach Benutzer und eine andere Abfrage geben, die Ihnen die audit_task-Informationen nach Benutzer liefert und dann diese der Tabelle Benutzer beifügt. Es ist nicht klar, wie Sie die Informationen in jedem Fall zusammenfassen möchten. Wenn zum Beispiel ein bestimmter Benutzer über 10 audit_period
rows verfügt, wie soll die Abfrage diese Zeiträume aufschlüsseln? Ich habe hier eine Summe der Durationen angenommen, aber vielleicht möchten Sie ein Minimum oder Maximum oder vielleicht sogar ein Gesamtdelta.