Improve company productivity with a Business Account.Sign Up

x
?
Solved

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

Posted on 2010-11-30
2
Medium Priority
?
305 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 2000 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

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

SQL Server engine let you use a Windows account or a SQL Server account to connect to a SQL Server instance. This can be configured immediatly during the SQL Server installation or after in the Server Authentication section in the Server properties …
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.
SQL Database Recovery Software repairs the MDF & NDF Files, corrupted due to hardware related issues or software related errors. Provides preview of recovered database objects and allows saving in either MSSQL, CSV, HTML or XLS format. Ensures recov…
Stellar Phoenix SQL Database Repair software easily fixes the suspect mode issue of SQL Server database. It is a simple process to bring the database from suspect mode to normal mode. Check out the video and fix the SQL database suspect mode problem.

586 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