2014-12-04 98 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