2017-05-04 1 views
1

Ich verwende die folgenden sql, um die gesamten Jobs in jedem Monat aus 2 Tabellen zu erhalten. Bei der Importtabelle handelt es sich um Live-Jobs, die noch nicht abgeschlossen wurden, und die Tabelle import_archive enthält abgeschlossene Jobs.Abrufen einzelner Datensätze bei Verwendung einer Union und 2 Tabellen

Ich muss alle Jobs in jeder Woche aus den beiden Tabellen zählen und anzeigen.

Ich verwende die folgende SQL, die funktioniert, aber doppelte Wochenaufzeichnungen zeigt, wo sich Jobs in beiden Tabellen befinden. Ich brauche diese zusammen, um 1 Rekord statt 2 für die gleiche Woche zu zeigen.

Warum muss ich ändern, um nur einen einzigen Datensatz für jede Woche anzuzeigen, obwohl 2 Tabellen verwendet werden?

+0

Schwer zu verstehen, was du meinst. Wenn Sie uns zeigen, was Sie gerade mit dieser Abfrage erhalten und was Sie dann erhalten möchten, können wir Ihnen helfen. – user3741598

+0

Tun Sie die Vereinigung zuerst dann die Woche des Jahres, zählen und sub von Daten ... – xQbert

Antwort

0

Sie müssen die beiden Tabellen start_dates zuerst dann erhalten Sie Ihre Zählungen und Datum Parsing. UNION Alle, weil wir doppelte Daten behalten möchten, wie sie für verschiedene Jobs sein könnten. Wenn Sie mehr Daten/Spalten benötigen, stellen Sie sicher, dass Sie vor der Analyse/Manipulation alle beiden Gruppen zusammenführen.

Einfach ausgedrückt: Generiere einen Master-Datensatz, der alle Daten aus beiden Tabellen enthält, und führe dann die Manipulation von Zahlen/Daten durch.

SELECT WEEKOFYEAR(Job_Start_Date) AS weekno 
    , COUNT(1) AS Jobs 
    , SUBDATE(Job_Start_Date, INTERVAL WEEKDAY(Job_Start_Date) DAY) AS Week_Start_Date 
FROM (SELECT Job_Start_date 
     FROM import where Job_Work_Type='PPD' 
     UNION ALL 
     SELECT Job_Start_date 
     FROM import_archive where Job_Work_Type='PPD') 
GROUP BY WEEKOFYEAR(Job_Start_Date 

Oder Sie haben wieder zu aggregieren, nachdem Sie zwei verschiedene Datensätze erzeugen.

SELECT weekno, sum(jobs) as jobs, week_start_Date 
FROM (
(SELECT WEEKOFYEAR(Job_Start_Date) AS weekno 
     , COUNT(1) AS Jobs 
     , SUBDATE(Job_Start_Date, INTERVAL WEEKDAY(Job_Start_Date) DAY) AS Week_Start_Date 
FROM import where Job_Work_Type='PPD' 
GROUP BY WEEKOFYEAR(Job_Start_Date) 
) 
union 

(SELECT WEEKOFYEAR(Job_Start_Date) AS weekno 
     , COUNT(1) AS Jobs 
     , SUBDATE(Job_Start_Date, INTERVAL WEEKDAY(Job_Start_Date) DAY) AS Week_Start_Date 
FROM import_archive where Job_Work_Type='PPD' 
GROUP BY WEEKOFYEAR(Job_Start_Date) 
) 
) 
GROUP BY weekNo, weekStart_date 
+0

Wenn ich einen Ihrer Vorschläge ausführen, erhalte ich die folgende Fehlermeldung. Jede abgeleitete Tabelle muss ihren eigenen Alias ​​haben Was muss ich in der SQL ändern? Alan –

Verwandte Themen