Last active
December 22, 2015 16:19
-
-
Save andybellenie/6498720 to your computer and use it in GitHub Desktop.
SQL query to optimize
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
SELECT * | |
FROM ( | |
SELECT TOP 1000 | |
sc.contactId, con.companyId, con.firstName, con.lastName, con.firstName + ' ' + con.lastName AS fullName, con.jobTitle, con.socCode, | |
con.primaryEmail, con.secondaryEmail, con.telDirect, con.telHome, con.telMobile, | |
cmp.name AS company, cmp.tradingAs, cmp.telMain, cmp.address1, cmp.address2, cmp.address3, cmp.city, cmp.postcode, cmp.naicsCode, | |
cmp.countryCode, cmp.regionCode, cty.name AS country, cmp.industry, cmp.state, cmp.localSize, cmp.globalSize, | |
mostRecent.id AS lastDialId, mostRecent.createdAt AS lastDialAt, mostRecent.outcomeCode, mostRecent.createdBy AS lastDialBy, mostRecent.blacklistId, | |
o.label AS outcomeLabel, o.isConnect, o.isLead, o.reattempt, bl.label AS blacklistLabel, | |
creator.firstName + ' ' + creator.lastName AS lastDialByName, DATEDIFF(day, mostRecent.createdAt, GETUTCDATE()) AS lastDialAge | |
FROM campaignSources cs | |
INNER JOIN campaigns cam ON cam.id = cs.campaignId AND cam.id = <cfqueryparam cfsqltype="cf_sql_integer" value="#this.id#"> | |
INNER JOIN orders ord ON ord.id = cam.orderId | |
INNER JOIN sources s ON s.id = cs.sourceId AND (s.expiresAt IS NULL OR s.expiresAt > CAST(GETUTCDATE() AS DATE)) | |
INNER JOIN sourceContacts sc ON sc.sourceId = cs.sourceId | |
INNER JOIN contacts con ON con.id = sc.contactId | |
INNER JOIN companies cmp ON cmp.id = con.companyId | |
LEFT JOIN countries AS cty ON cty.code = cmp.countryCode | |
LEFT JOIN dials AS mostRecent ON mostRecent.contactId = con.id AND mostRecent.campaignId = cs.campaignId AND mostRecent.isMostRecent = 1 | |
LEFT JOIN outcomes AS o ON o.code = mostRecent.outcomeCode | |
LEFT JOIN blacklists AS bl ON bl.id = mostRecent.blacklistId | |
LEFT JOIN users AS creator ON creator.id = mostRecent.createdBy | |
WHERE sc.contactId NOT IN | |
( | |
SELECT contactId | |
FROM dials | |
WHERE submittedAt IS NULL | |
AND createdAt > DATEADD(MINUTE, -30, GETUTCDATE()) | |
AND campaignId = <cfqueryparam cfsqltype="cf_sql_integer" value="#this.id#"> | |
UNION ALL | |
SELECT contacts.id | |
FROM leads | |
INNER JOIN contacts ON contacts.primaryEmail = leads.primaryEmail | |
WHERE leads.campaignId = <cfqueryparam cfsqltype="cf_sql_integer" value="#this.id#"> | |
UNION ALL | |
SELECT contacts.id | |
FROM leads | |
INNER JOIN excludedCampaigns ON excludedCampaigns.excludedCampaignId = leads.campaignId | |
INNER JOIN contacts ON contacts.primaryEmail = leads.primaryEmail | |
WHERE excludedCampaigns.campaignId = <cfqueryparam cfsqltype="cf_sql_integer" value="#this.id#"> | |
UNION ALL | |
SELECT contactId | |
FROM dials | |
INNER JOIN blacklists ON blacklists.id = dbo.dials.blacklistId | |
WHERE blacklists.campaignId = <cfqueryparam cfsqltype="cf_sql_integer" value="#this.id#"> | |
OR blacklists.clientId = <cfqueryparam cfsqltype="cf_sql_integer" value="#this.order().clientId#"> | |
UNION ALL | |
SELECT contacts.id | |
FROM contacts | |
INNER JOIN leads ON leads.companyId = contacts.companyId | |
INNER JOIN campaigns ON campaigns.id = leads.campaignId | |
WHERE leads.campaignId = <cfqueryparam cfsqltype="cf_sql_integer" value="#this.id#"> | |
GROUP BY contacts.id, leads.campaignId, campaigns.maxLeadsPerCompany | |
HAVING COUNT(leads.id) >= campaigns.maxLeadsPerCompany | |
UNION ALL | |
SELECT contacts.id | |
FROM contacts | |
INNER JOIN leads ON leads.companyId = contacts.companyId | |
INNER JOIN companies ON companies.id = contacts.companyId AND companies.countryCode = leads.countryCode | |
INNER JOIN campaignAreas ON campaignAreas.campaignId = leads.campaignId AND leads.countryCode = campaignAreas.countryCode | |
WHERE leads.campaignId = <cfqueryparam cfsqltype="cf_sql_integer" value="#this.id#"> | |
GROUP BY contacts.id, leads.campaignId, leads.countryCode, campaignAreas.maxLeads | |
HAVING COUNT(leads.id) >= campaignAreas.maxLeads | |
) | |
<cfif Len(arguments.filters.jobTitle)> | |
AND ( | |
1 = 0 | |
<cfloop list="#Replace(arguments.filters.jobTitle, ' OR ', '||', 'all')#" index="term" delimiters="||"> | |
OR con.jobTitle LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#term#%"> | |
</cfloop> | |
) | |
</cfif> | |
<cfif Len(arguments.filters.company)> | |
AND ( | |
1 = 0 | |
<cfloop list="#Replace(arguments.filters.company, ' OR ', '||', 'all')#" index="term" delimiters="||"> | |
OR cmp.name LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#term#%"> | |
</cfloop> | |
) | |
</cfif> | |
<cfif Len(arguments.filters.industry)> | |
AND ( | |
1 = 0 | |
<cfloop list="#Replace(arguments.filters.industry, ' OR ', '||', 'all')#" index="term" delimiters="||"> | |
OR cmp.industry LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#term#%"> | |
</cfloop> | |
) | |
</cfif> | |
<cfif Len(arguments.filters.state)> | |
AND ( | |
1 = 0 | |
<cfloop list="#Replace(arguments.filters.state, ' OR ', '||', 'all')#" index="term" delimiters="||"> | |
OR cmp.state LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#term#%"> | |
</cfloop> | |
) | |
</cfif> | |
<cfif Len(arguments.filters.postcode)> | |
AND ( | |
1 = 0 | |
<cfloop list="#Replace(arguments.filters.postcode, ' OR ', '||', 'all')#" index="term" delimiters="||"> | |
OR cmp.postcode LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#term#%"> | |
</cfloop> | |
) | |
</cfif> | |
<cfif ListLen(arguments.filters.countryCode) or ListLen(arguments.filters.regionCode) or ListLen(arguments.filters.cityId)> | |
AND ( | |
1 = 0 | |
<cfif ListLen(arguments.filters.countryCode)> | |
OR cmp.countryCode IN (<cfqueryparam cfsqltype="cf_sql_varchar" list="true" value="#arguments.filters.countryCode#">) | |
</cfif> | |
<cfif ListLen(arguments.filters.regionCode)> | |
OR cmp.regionCode IN (<cfqueryparam cfsqltype="cf_sql_varchar" list="true" value="#arguments.filters.regionCode#">) | |
</cfif> | |
<cfif ListLen(arguments.filters.cityId)> | |
OR cmp.city IN (<cfqueryparam cfsqltype="cf_sql_varchar" list="true" value="#arguments.filters.cityId#">) | |
</cfif> | |
) | |
</cfif> | |
<cfif ListLen(arguments.filters.socCode)> | |
AND con.socCode IN (<cfqueryparam cfsqltype="cf_sql_integer" list="true" value="#arguments.filters.socCode#">) | |
</cfif> | |
<cfif ListLen(arguments.filters.naicsCode)> | |
AND cmp.naicsCode IN (<cfqueryparam cfsqltype="cf_sql_integer" list="true" value="#arguments.filters.naicsCode#">) | |
</cfif> | |
<cfif IsNumeric(arguments.filters.minLocalSize)> | |
AND cmp.localSize >= <cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.filters.minLocalSize#"> | |
</cfif> | |
<cfif IsNumeric(arguments.filters.maxLocalSize)> | |
AND cmp.localSize <= <cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.filters.maxLocalSize#"> | |
</cfif> | |
<cfif IsNumeric(arguments.filters.minGlobalSize)> | |
AND cmp.globalSize >= <cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.filters.minGlobalSize#"> | |
</cfif> | |
<cfif IsNumeric(arguments.filters.maxGlobalSize)> | |
AND cmp.globalSize <= <cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.filters.maxGlobalSize#"> | |
</cfif> | |
<cfif arguments.filters.contactedToday> | |
AND CAST(mostRecent.createdAt AS date) = CAST(GETUTCDATE() AS DATE) | |
<cfelseif arguments.filters.notContactedToday> | |
AND CAST(mostRecent.createdAt AS date) != CAST(GETUTCDATE() AS DATE) | |
</cfif> | |
<cfif not arguments.filters.includeCompleted> | |
AND ISNULL(o.reattempt, 1) = 1 | |
</cfif> | |
<cfif not arguments.filters.includeUncontactable> | |
AND (con.telDirect IS NOT NULL OR con.telHome IS NOT NULL OR con.telMobile IS NOT NULL OR cmp.telMain IS NOT NULL) | |
</cfif> | |
<cfif arguments.filters.includeUncontactable> | |
AND (con.telDirect IS NULL AND con.telHome IS NULL AND con.telMobile IS NULL AND cmp.telMain IS NULL) | |
</cfif> | |
GROUP BY sc.contactId, con.companyId, con.firstName, con.lastName, con.jobTitle, con.primaryEmail, con.secondaryEmail, | |
con.telDirect, con.telHome, con.telMobile, con.socCode, | |
cmp.name, cmp.tradingAs, cmp.telMain, cmp.address1, cmp.address2, cmp.address3, cmp.city, | |
cmp.countryCode, cmp.regionCode, cmp.postcode, cmp.naicsCode, | |
cmp.industry, cmp.state, cmp.localSize, cmp.globalSize, cty.name, | |
mostRecent.id, mostRecent.createdAt, mostRecent.outcomeCode, mostRecent.createdBy, mostRecent.blacklistId, | |
o.label, o.isConnect, o.isLead, o.reattempt, bl.label, | |
creator.firstName, creator.lastName | |
) AS results | |
ORDER BY company, fullName |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment