2017-09-18 2 views
0

Ich habe Daten, die Mitarbeiter Ebene ist, die ich aggregieren täglich, und dann wieder zu einem Dienstplan, um den Namen und Manager-Namen usw. zu bekommen. Gibt es eine Möglichkeit, dann diese Daten (mit dem Manager-Namen) zu aggregieren und wieder beizutreten zu den ursprünglichen Daten?Postgres, Abfrage des Ergebnisses einer Unterabfrage?

Bis zu diesem Punkt funktioniert gut. Ich mache eine Zeile pro System-ID pro Datum. Ich schließe mich der System-ID mit einer Zuordnungstabelle an, um die Mitarbeiter-ID abzurufen. Ich schließe mich dann einer Dienstplan-Tabelle an, um einige Mitarbeiterinformationen (einschließlich des Namens ihres Vorgesetzten) zu erhalten.

SELECT * 
FROM 
    (SELECT DISTINCT (system_id) 
    FROM schema.fact_table 
    WHERE report_date >= '2017-09-01') AS t1 
CROSS JOIN 
    (SELECT report_date :: DATE 
    FROM generate_series('2017-09-01' :: DATE , '2017-09-10' :: DATE , INTERVAL '1 day') report_date) AS t2 
LEFT JOIN 
    (SELECT * 
    FROM schema.dimension_table_1 
    WHERE system_id IS NOT NULL 
      AND expiration_date > '2017-09-01') AS t3 
    ON t1.system_id = t3.system_id 
     AND t2.report_date >= t3.effective_date 
     AND t2.report_date <= t3.expiration_date 
LEFT JOIN 
    (SELECT * 
    FROM schema.dimension_table_2 
    WHERE expiration_date > '2017-09-01') AS t4 
    ON t3.employee_id = t4.employee_id 
     AND report_date >= t4.effective_date 
     AND report_date <= t4.expiration_date 
LEFT JOIN 
    (SELECT report_date AS report_date, 
     system_id AS system_id, 
     sum(stuff_count) AS stuff_count, 

    FROM schema.fact_table_1 
    WHERE report_date >= '2017-09-01' 
    GROUP BY report_date, avaya_id, source_database) AS t5 
    ON t2.report_date = t5.report_date 
     AND t1.system_id = t5.system_id 

Ich möchte dann einige Spalten hinzufügen, die die aggregierte tägliche Leistung für das Team des Mitarbeiters haben.

Wie kann ich das erreichen? Ich muss dem gesamten oberen Bereich (tägliche aggregierte Daten auf Mitarbeiterebene mit dem Namen des Supervisors) einen Alias ​​geben und diesen Alias ​​dann auf dem Datum + supervisor_id_column aggregieren. Ich konnte es einfach nicht richtig funktionieren lassen.

+0

Ihr letzter Unterabfragealias ist 't7', aber Sie verwenden' supervisor_employee_id' ohne Alias? Sie brauchen 'ON T7.supervisor_employee_id = SOMETHING.supervisor_employee_id' –

+0

Entschuldigung, ja. Ich hatte versucht, Aliase hinzuzufügen, aber ich scheiterte. Das ist nur, weil ich etwas kopiert und eingefügt habe und vergessen habe, es zu entfernen. Ignoriere meine Aliase in diesem letzten Abschnitt. – trench

+1

mmmm Ich kann das nicht ignorieren. Wenn Sie einen korrekten Aliasnamen angeben, sollte die Abfrage funktionieren. Aber deine Frage ist zu lang. Ich kann nicht alles für dich debuggen. Zeigen Sie uns db Schema, Beispieldaten, aktuelle und erwartete Ausgabe. \t Bitte lesen Sie [** How-to-Ask **] (http://stackoverflow.com/help/how-to-ask) \t \t Und hier ist ein großartiger Ort, um [** START **] (http://spaghettiba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/) um zu erfahren, wie Sie die Qualität Ihrer Fragen verbessern und bessere Antworten erhalten. \t [** So erstellen Sie ein minimales, vollständiges und überprüfbares Beispiel **] (http://stackoverflow.com/help/mcve) –

Antwort

1

Ich muss irgendwie ein Alias ​​für den gesamten oberen Abschnitt (täglich aggregierten Mitarbeiterebene Daten mit dem Betreuer Name) geben

Verwendung MIT (Common Table Expressions), die ermöglichen es Ihnen, „Wiederverwendung“ eine Abfrage durch Bezugnahme auf einen Alias, der der Abfrage z

Aggregationen können je nach Bedarf innerhalb oder nach dem CTE durchgeführt werden.

+0

Ich war mir dessen nicht bewusst, aber es machte es so viel einfacher. Ich weiß nicht, was mein Problem vorher war ... vielleicht Klammern oder etwas Kleines. Aber das hat alles aufgeräumt und ich bin ein Fan. Vielen Dank – trench

Verwandte Themen