Offline Matching Queries and Statements for PostgreSQL

Table of Contents

Offline Matching Queries

These are primarily used to investigate low Offline Matching.

For additional steps to investigate Offline Matching, see: Offline Attribution QA Issues 

 

-- MATCHED SALES W LEADS
SELECT sales.sales_raw.new_or_used, sales.sales_raw.sale_type, sales.sales_standardized.*, sales.matched_cdc.*, sales.leads_standardized.*, sales.leads_raw.raw_source, sales.leads_raw.raw_source_detail
    FROM sales.sales_standardized
    JOIN sales.sales_raw ON sales.sales_standardized.raw_sale_id = sales_raw.raw_sale_id
    JOIN sales.matched_cdc ON sales.sales_standardized.sale_id = matched_cdc.sale_id
    JOIN sales.leads_standardized ON sales.leads_standardized.lead_id = matched_cdc.lead_id
    JOIN sales.leads_raw ON leads_standardized.raw_lead_id = leads_raw.raw_lead_id
WHERE   sales_standardized.property_id = ${propid}
AND   sales_standardized.sales_date >= '${startdate YYYY-MM-DD}'
AND   sales_standardized.sales_date <  (to_date('${startdate YYYY-MM-DD}','YYYY-MM-DD') + interval '1 month')
AND   NOT(leads_standardized.lead_type = 'CRM Lead' and leads_raw.raw_source is null AND leads_raw.raw_source_detail is null)     -- exclude CRM Leads where lead raw_source and raw_source_detail are both blank
AND   NOT(leads_standardized.lead_type = 'Chat' and leads_raw.raw_source is null AND leads_raw.raw_source_detail is null)     -- exclude Chat leads where lead raw_source and raw_source_detail are both blank
AND   NOT(leads_standardized.lead_type = 'Phone' and leads_standardized.campaign_name is null AND leads_standardized.campaign_phone_number is null  AND leads_standardized.campaign_id is null)     -- exclude Phone leads where all campaign fields are blank
order by sales_standardized.first_name, sales_standardized.last_name;
-- These sales matched leads, but may not count towards Offline Matching IF:
--   - raw_source and raw_source_detail combination match an internal classification
--  You will need to compare these manually.


-- UNMATCHED SALES
SELECT sales.sales_raw.new_or_used as "sales_raw.new_or_used", sales.sales_raw.sale_type as "sales_raw.sale_type", sales.sales_standardized.*
FROM   sales.sales_standardized
JOIN   sales.sales_raw on sales_standardized.raw_sale_id = sales_raw.raw_sale_id
WHERE  NOT EXISTS (
   SELECT  -- SELECT list mostly irrelevant; can just be empty in Postgres
   FROM   sales.matched_cdc
   WHERE  matched_cdc.sale_id = sales_standardized.sale_id
   )
AND   sales_standardized.property_id = ${propid}
AND   sales_standardized.sales_date >= '${startdate YYYY-MM-DD}'
AND   sales_standardized.sales_date <  (to_date('${startdate YYYY-MM-DD}','YYYY-MM-DD') + interval '1 month')
order by sales_standardized.first_name, sales_standardized.last_name;
-- May not include Sales where all matched Leads meet these criteria:
--             - CRM Leads with blank raw_source and raw_source_detail values
--             - Chat with blank raw_source and raw_source_detail values
--             - Phone leads with blank campaign


-- UNMATCHED LEADS NEW
SELECT sales.leads_raw.raw_source, sales.leads_raw.raw_source_detail, sales.leads_standardized.*
FROM   sales.leads_standardized
JOIN   sales.leads_raw on leads_standardized.raw_lead_id = leads_raw.raw_lead_id
WHERE (NOT EXISTS(
        SELECT -- SELECT list mostly irrelevant; can just be empty in Postgres
        FROM sales.matched_cdc
        WHERE matched_cdc.lead_id = leads_standardized.lead_id
                 )
    OR (leads_standardized.lead_type = 'CRM Lead' AND leads_raw.raw_source is null AND
        leads_raw.raw_source_detail is null) -- include CRM Leads w/ blank raw_source and raw_source_detail
    OR (leads_standardized.lead_type = 'Chat' and leads_raw.raw_source is null AND
        leads_raw.raw_source_detail is null) -- include Chat leads where lead raw_source and raw_source_detail are both blank
    OR (leads_standardized.lead_type = 'Phone' and leads_standardized.campaign_name is null AND
        leads_standardized.campaign_phone_number is null AND
        leads_standardized.campaign_id is null) -- include Phone leads where all campaign fields are blank
       )
AND   leads_standardized.property_id = ${propid}
AND   leads_standardized.start_time >= (to_date('${startdate YYYY-MM-DD}','YYYY-MM-DD') - interval '2 month')    -- should be a 3 month date range as we match 3 months back
AND   leads_standardized.start_time <  (to_date('${startdate YYYY-MM-DD}','YYYY-MM-DD') + interval '1 month')
order by leads_raw.raw_source, leads_raw.raw_source_detail;

-- ====================================================================================

-- INCOMPLETE LEAD DATA
SELECT sales.leads_raw.raw_source, sales.leads_raw.raw_source_detail, sales.leads_standardized.*
FROM   sales.leads_standardized
JOIN   sales.leads_raw on leads_standardized.raw_lead_id = leads_raw.raw_lead_id
WHERE (
     (leads_standardized.lead_type = 'CRM Lead' AND leads_raw.raw_source is null AND
        leads_raw.raw_source_detail is null) --  CRM Leads w/ blank raw_source and raw_source_detail
    OR (leads_standardized.lead_type = 'Chat' and leads_raw.raw_source is null AND
        leads_raw.raw_source_detail is null) --  Chat leads where lead raw_source and raw_source_detail are both blank
    OR (leads_standardized.lead_type = 'Phone' and leads_standardized.campaign_name is null AND
        leads_standardized.campaign_phone_number is null AND
        leads_standardized.campaign_id is null) --  Phone leads where all campaign fields are blank
    )
AND   leads_standardized.property_id = ${propid}
AND   leads_standardized.start_time >= (to_date('${startdate YYYY-MM-DD}','YYYY-MM-DD') - interval '2 month')    -- should be a 3 month date range as we match 3 months back
AND   leads_standardized.start_time <  (to_date('${startdate YYYY-MM-DD}','YYYY-MM-DD') + interval '1 month')
order by leads_raw.raw_source, leads_raw.raw_source_detail;


-- FILTERED LEADS COUNTS BY REASON
SELECT sales.leads_filtered.reason, count(*) FROM sales.leads_raw
         JOIN sales.leads_filtered ON sales.leads_raw.raw_lead_id = sales.leads_filtered.raw_lead_id
WHERE  sales.leads_raw.property_id = ${propid}
AND   leads_raw.created_ts >= (to_date('${startdate YYYY-MM-DD}','YYYY-MM-DD') - interval '2 month')    -- created in the past 2 months (gives us the last 3 months of leads)
GROUP BY leads_filtered.reason;

-- FILTERED LEADS COUNTS BY REASON
SELECT sales.leads_filtered.reason, sales.leads_raw.* FROM sales.leads_raw
         JOIN sales.leads_filtered ON sales.leads_raw.raw_lead_id = sales.leads_filtered.raw_lead_id
WHERE  sales.leads_raw.property_id = ${propid}
AND   leads_raw.created_ts >= (to_date('${startdate YYYY-MM-DD}','YYYY-MM-DD') - interval '2 month');    -- created in the past 2 months (gives us the last 3 months of leads)


-- FILTERED SALES COUNTS BY REASON for DV or CDK
SELECT sales.sales_filtered.reason, count(*) FROM sales.sales_raw
         JOIN sales.sales_filtered ON sales.sales_raw.raw_sale_id = sales.sales_filtered.raw_sale_id
WHERE  sales.sales_raw.property_id = ${propid}
AND   sales_raw.created_ts >= (to_date('${startdate YYYY-MM-DD}','YYYY-MM-DD'))    -- created in the sales month
GROUP BY sales_filtered.reason;

-- FILTERED SALES (DETAIL) BY REASON for DV or CDK
SELECT DISTINCT ON (sales.sales_raw.vin)       -- dedupe based on VIN
  sales.sales_filtered.reason, sales.sales_raw.* FROM sales.sales_raw
  JOIN sales.sales_filtered ON sales.sales_raw.raw_sale_id = sales.sales_filtered.raw_sale_id
WHERE  sales.sales_raw.property_id = ${propid}
AND   sales_raw.created_ts >= (to_date('${startdate YYYY-MM-DD}','YYYY-MM-DD'))    -- created in the sales month
;


-- FILTERED SALES COUNTS BY REASON for COLLECT SALES FILES
SELECT sales.sales_filtered.reason, count(*) FROM sales.sales_raw
         JOIN sales.sales_filtered ON sales.sales_raw.raw_sale_id = sales.sales_filtered.raw_sale_id
WHERE  sales.sales_raw.property_id = ${propid}
AND   sales_raw.created_ts >= (to_date('${startdate YYYY-MM-DD}','YYYY-MM-DD') + interval '1 month')    -- created in the month after the sales month (when we would have loaded the sales file)
GROUP BY sales_filtered.reason;



Can't find what you're looking for?

Our team is here to help.

Contact Support