Solved

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

Posted on 2010-11-30
2
283 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
Comment Utility
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
Comment Utility
You Sir, are a gent and a scholar!
0

Featured Post

6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

Join & Write a Comment

Suggested Solutions

INTRODUCTION: While tying your database objects into builds and your enterprise source control system takes a third-party product (like Visual Studio Database Edition or Red-Gate's SQL Source Control), you can achieve some protection using a sing…
In this article I will describe the Copy Database Wizard method as one possible migration process and I will add the extra tasks needed for an upgrade when and where is applied so it will cover all.
It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.

763 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

Need Help in Real-Time?

Connect with top rated Experts

6 Experts available now in Live!

Get 1:1 Help Now