Skip to content

Instantly share code, notes, and snippets.

@andybellenie
Last active December 22, 2015 16:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andybellenie/6498720 to your computer and use it in GitHub Desktop.
Save andybellenie/6498720 to your computer and use it in GitHub Desktop.
SQL query to optimize
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