2017-05-04 5 views
1

次のSQLを使用して、2つの表から各月の合計ジョブを取得します。インポートテーブルはまだ完了していないライブジョブで、import_archiveテーブルには完了したジョブが格納されています。共用体と2つの表を使用する場合の単一レコードの取得

2つのテーブルから毎週すべてのジョブをカウントして表示する必要があります。

私は働いているが、ジョブが両方のテーブルにある重複週レコードを表示しています。同じ週に2つではなく1つのレコードを表示するために、これらを一緒に追加する必要があります。

(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)) 

なぜ2つのテーブルが使用されていても毎週1つのレコードを表示するように変更する必要がありますか?

+0

あなたは何を意味するのか分かりません。あなたが現在そのクエリを取得しているものを表示してから取得したいものを表示した場合は、サポートすることができます。 – user3741598

+0

最初に組合を行い、その後weekof年、count、subの日付を返します。 – xQbert

答えて

0

UNION ALL最初に2つのテーブルをstart_datesにしてから、カウントと日付を解析します。 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 (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 

2つの異なるデータセットを生成した後、再度集計する必要があります。

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

あなたの提案を実行すると、次のエラーメッセージが表示されます。 すべての派生テーブルには独自のエイリアスが必要です SQLで変更する必要があるのは何ですか? アラン –

関連する問題