Solved

How Can I match tables on "similar dates" in SQL

Posted on 2010-11-30
2
291 Views
Last Modified: 2012-06-21
Hi All,

I have the query below. It is a filthy piece of code, but the general premis is that amongst other things, I amd trying to join 2 tables based on a date. Unfortunatly the dates do not match exactly, so I have to match on the closest date I can find, be it earlier or later, but with a maximum window of +/- 10 mins, and if it does not exists, create it.

This is throwing an error saying Multiple columns are specified in an aggregated expression containing an outer reference. If an expression being aggregated contains an outer reference, then that outer reference must be the only column referenced in the expression.


Can anybody help? It's driving me mad!
SELECT 
       ISNULL(C.[DATE], DR.[DATE]) [DATE]
      ,ISNULL(C.[CLIENT_ID], DR.[CLIENT_ID]) [CLIENT_ID]
      ,ISNULL(C.[CAMPAIGN_ID], DR.[CAMPAIGN_ID]) [CAMPAIGN_ID]
      ,ISNULL(C.[SITE_ID], DR.[SITE_ID]) [SITE_ID]
      ,ISNULL(C.[PLACEMENT_ID], DR.[PLACEMENT_ID]) [PLACEMENT_ID]
      ,ISNULL(C.[CREATIVE_ID], DR.[CREATIVE_ID]) [CREATIVE_ID]
      ,ISNULL(C.[RULE_ID], DR.[RULE_ID]) [RULE_ID]
      ,ISNULL(C.[MEDIAPLEX_COOKIE_ID], DR.[MEDIAPLEX_COOKIE_ID]) [MEDIAPLEX_ID]
      ,ISNULL(C.[PARAMETER_STRING], DR.[PARAMETER_STRING]) [PARAMETER_STRING]
      ,ISNULL(C.[PERFORMANCE_TRACKER_1], DR.[PERFORMANCE_TRACKER_1]) [PERFORMANCE_TRACKER_1]
      ,ISNULL(C.[PERFORMANCE_TRACKER_2], DR.[PERFORMANCE_TRACKER_2]) [PERFORMANCE_TRACKER_2]
      ,ISNULL(C.[PERFORMANCE_TRACKER_3], DR.[PERFORMANCE_TRACKER_3]) [PERFORMANCE_TRACKER_3]
      ,C.[Country_ID]
      ,C.[State/Province]
      ,C.[DMA]
      ,C.[UserAgentString]
      ,ISNULL(C.[Date], DR.[Event_Date]) [EventDate]
      ,DR.[TimeOfDayConversion]
FROM 
		[dbo].[Click] C
RIGHT OUTER JOIN [dbo].[DerivedROI] DR
	ON 
		ABS(DATEDIFF(second, C.Date, DR.Event_Date)) 
		= 
		( 
		SELECT MIN(ABS(DATEDIFF(second, C.[Date], DR2.[Event_Date]))) 
			FROM [dbo].[DerivedROI] AS DR2 
		)
	AND C.[MEDIAPLEX_COOKIE_ID] = DR.[MEDIAPLEX_COOKIE_ID]
	AND C.[CLIENT_ID] = DR.[CLIENT_ID]
WHERE	
	DR.[Date] > CAST(FLOOR(CAST(GETDATE() - 5 AS FLOAT)) AS DATETIME)

Open in new window

0
Comment
Question by:carter-greenan
2 Comments
 
LVL 7

Accepted Solution

by:
rmm2001 earned 500 total points
ID: 34240194
Try this
SELECT 
       ISNULL(C.[DATE], DR.[DATE]) [DATE]
      ,ISNULL(C.[CLIENT_ID], DR.[CLIENT_ID]) [CLIENT_ID]
      ,ISNULL(C.[CAMPAIGN_ID], DR.[CAMPAIGN_ID]) [CAMPAIGN_ID]
      ,ISNULL(C.[SITE_ID], DR.[SITE_ID]) [SITE_ID]
      ,ISNULL(C.[PLACEMENT_ID], DR.[PLACEMENT_ID]) [PLACEMENT_ID]
      ,ISNULL(C.[CREATIVE_ID], DR.[CREATIVE_ID]) [CREATIVE_ID]
      ,ISNULL(C.[RULE_ID], DR.[RULE_ID]) [RULE_ID]
      ,ISNULL(C.[MEDIAPLEX_COOKIE_ID], DR.[MEDIAPLEX_COOKIE_ID]) [MEDIAPLEX_ID]
      ,ISNULL(C.[PARAMETER_STRING], DR.[PARAMETER_STRING]) [PARAMETER_STRING]
      ,ISNULL(C.[PERFORMANCE_TRACKER_1], DR.[PERFORMANCE_TRACKER_1]) [PERFORMANCE_TRACKER_1]
      ,ISNULL(C.[PERFORMANCE_TRACKER_2], DR.[PERFORMANCE_TRACKER_2]) [PERFORMANCE_TRACKER_2]
      ,ISNULL(C.[PERFORMANCE_TRACKER_3], DR.[PERFORMANCE_TRACKER_3]) [PERFORMANCE_TRACKER_3]
      ,C.[Country_ID]
      ,C.[State/Province]
      ,C.[DMA]
      ,C.[UserAgentString]
      ,ISNULL(C.[Date], DR.[Event_Date]) [EventDate]
      ,DR.[TimeOfDayConversion]
FROM [dbo].[Click] C
RIGHT OUTER JOIN [dbo].[DerivedROI] DR ON ABS(DATEDIFF(minute, DR.[EventDate], c.[Date])) < 10
	AND C.[MEDIAPLEX_COOKIE_ID] = DR.[MEDIAPLEX_COOKIE_ID]
	AND C.[CLIENT_ID] = DR.[CLIENT_ID]
WHERE	
	DR.[Date] > CAST(FLOOR(CAST(GETDATE() - 5 AS FLOAT)) AS DATETIME)

Open in new window

0
 
LVL 2

Author Closing Comment

by:carter-greenan
ID: 34240309
You Sir, are a gent and a scholar!
0

Featured Post

Efficient way to get backups off site to Azure

This user guide provides instructions on how to deploy and configure both a StoneFly Scale Out NAS Enterprise Cloud Drive virtual machine and Veeam Cloud Connect in the Microsoft Azure Cloud.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Data architecture is an important aspect in Software as a Service (SaaS) delivery model. This article is a study on the database of a single-tenant application that could be extended to support multiple tenants. The application is web-based develope…
In this article we will get to know that how can we recover deleted data if it happens accidently. We really can recover deleted rows if we know the time when data is deleted by using the transaction log.
Email security requires an ever evolving service that stays up to date with counter-evolving threats. The Email Laundry perform Research and Development to ensure their email security service evolves faster than cyber criminals. We apply our Threat…
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…

821 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question