2014-12-04 95 views
0

該查詢將返回ETL的位置,以及哪個表在ETL過程中被抽取。我想創建一個查詢,它向我顯示任何對於事件表的設置表> max(date_pulled)具有max(date_pulled)的位置。如何執行比較的mySQL查詢?

SELECT 

location_id, table_name, max(date_pulled) 

FROM 
ods.etl_log 
where table_name in ('events','settings') 

group by location_id, table_name 

結果看起來是這樣的:

location_id | table_name | max(date_pulled) 
20   | events  | 2014-12-04 
20   | settings | 2014-12-05 
26   | events  | 2014-12-04 
26   | settings | 2014-12-03 

但我最終的結果,我想是這樣的:

location_id | max(date_pulled) settings | max(date_pulled) events | settings > events? 
20   | 2014-12-05    | 2014-12-04    | Yes 
26   | 2014-12-03    | 2014-12-04    | No 

我需要使用嵌套的聯接做到這一點?一個用於事件,另一個用於設置,然後將它們連接在一起並創建一個if字段?

回答

0

這是pivoting的一種形式。您可以取得這些成果在MySQL幾種方法,這裏有一個與maxcase把你的結果在一個子查詢:

SELECT 
    location_id, 
    max(case when table_name ='events' then maxdate_pulled end) maxdateevent, 
    max(case when table_name ='settings' then maxdate_pulled end) maxdatesettings, 
    max(case when table_name ='settings' then maxdate_pulled end) > 
      max(case when table_name ='events' then maxdate_pulled end) settingsgreater 
FROM (
    SELECT location_id, table_name, max(date_pulled) maxdate_pulled 
    FROM ods.etl_log 
    WHERE table_name in ('events','settings') 
    GROUP BY location_id, table_name 
) T 
group by location_id 
+0

爲什麼是這種情況之前最大? – ppadru1 2014-12-04 21:42:34

+0

這工作!非常感謝!另外,不要在settingsgreater列中顯示0或1,我如何讓它顯示「是」或「否」? – ppadru1 2014-12-04 22:30:08