2015-11-18 28 views
1

我使用的是POSTGRESQL,並且正在創建一個表,它將加入adwords數據和salesforce數據,以便從成本/展示次數中獲得我的度量標準的完整視圖,以形成填充salesforce(活動成員記錄)。我們可以通過UTM參數加入這兩件事(銷售人員和AdWords),這個UTM參數是adwords中的「adgroup」值,併成爲salesforce中的「marketing_content_stamp__c」。問題是我們已經創建了一個cookie,它說:「如果這個人是有機的,從他們在這裏的最後一天查找存儲在個人cookie中的UTM值」。這就產生了一個問題,即有時我們會在表單中填入salesforce並記錄下該日期的廣告組沒有記錄。SQL - 如果日期在加入期間不匹配 - 更改日期然後加入

我想做什麼: 加入表,說temp.adwords_sf‘和廣告組表「如果我的表中存在填表’具有該日期沒有記錄,加入記錄到最後記錄的廣告組日期。」

例如,我在11/13的日期對我的ADGROUPX有一個表單填寫,但是我點擊的最後一個記錄是11/11。我希望這樣做,以使表單填充記錄與11/11相關聯,否則它不會顯示。

SQL查詢:

drop table temp.adwords_ui; 
Create table temp.adwords_ui as(
Select 
cast(date as date), 
Case 
WHEN adgroup like '%-uk-%' then 'UK' 
WHEN adgroup like '%-usa-%' then 'USA' 
WHEN adgroup like '%-us-%' then 'USA' 
END AS Target_Country, 
Case 
WHEN adgroup like '%-product-social%' then 'Product-SocialNetworks' 
WHEN adgroup like '%-product-solu%' then 'Product-Solutions' 
WHEN adgroup like '%-brand-%' then 'Brand' 
WHEN adgroup like '%-competitors-%' then 'Competitors' 
END AS ad_grouping, 
adgroup, 
sum(adcost) as cost, 
sum(impressions) as impressions, 
sum(adclicks) as clicks 
from rjm_current.adwords45309635_v2 
where adcost <> 0 
and date > '11/3/2015' 
group by 1,2,3,4); 


drop table temp.adwords_sf; 
Create table temp.adwords_sf as (
Select 
id, 
campaign_name__c as campaign, 
marketing_content_stamp__c as marketing_content, 
cast(firstrespondeddate as date) as form_fill_date, 
count(*) as form_fills 
from rjm_current.sf_campaignmember 
where marketing_source_stamp__c = 'google-adwords' 
and firstrespondeddate > '11/3/2015' 
group by 1,2,3,4); 


drop table custom.adwords; 
Create table custom.adwords as (
select 
a.date, 
a.target_country, 
a.ad_grouping, 
a.adgroup, 
b.campaign, 
a.cost, 
a.impressions, 
a.clicks, 
b.form_fills 
--((a.cost)/nullif(a.clicks,0)) as CPC, 
--(a.clicks/a.impressions) as CTR, 
--((a.cost)/nullif(b.form_fills,0)) as Cost_per_FormFill 
from temp.adwords_ui a 
Left Join temp.adwords_sf b on a.adgroup = b.marketing_content 
and cast(a.date as date) = cast(b.form_fill_date as date) 
); 

回答

0

我認爲這將是凌亂...

您可以通過更改到右連接,然後添加一個「,其中一個識別「錯過」行.date爲空」

添加到一個列用於每個‘A’柱,用子查詢像下面(例如用於日期欄)

(select top 1 date 
from a where date < b.form_filled_date 
and a.adgroup = b.marketing_content 
order by date desc) as a_date, 

(select top 1 target_country 
from a where date < b.form_filled_date 
and a.adgroup = b.marketing_content 
order by date desc) as a_target_country, 

將上面的代碼寫入臨時表中,然後將它們塗抹到自定義表的末尾!

希望有東西讓你無論如何開始...

+0

雖然這將是很奇怪。所以這將是每個字段的子查詢?似乎需要有一個更好的方法。 – Berra2k

+0

這是有點,但我認爲這是實現它的唯一方法,你試圖加入不平等,這不是它應該做的。我只是做了類似的事情,製作一個'sessionaliser'腳本來將個人網絡日誌點擊鏈接到會話。如果你想要擺脫純粹的SQL,我有一個小腳本遍歷記錄並填充鏈接表,將'點擊'表連接到'會話'表,每天運行一次,因此性能不那麼重要。 – JeffUK

+0

只要再考慮一下..你需要爲組成主鍵的列做上述操作,然後在連接中使用它來引入所有其他字段。 – JeffUK