SQL:使用CASE并仅返回最大值
对任何新手在这个问题上的疏漏或含糊不清先发制人的道歉 我想在约会时加入两张桌子SQL:使用CASE并仅返回最大值,sql,case,where,Sql,Case,Where,对任何新手在这个问题上的疏漏或含糊不清先发制人的道歉 我想在约会时加入两张桌子 Table1: Closing Date 2013-04-26 00:00:00.000 2013-01-26 00:00:00.000 Table2: Price Date 2013-04-24 00:00:00.000 2013-04-25 00:00:00.000 2013-04-26 00:00:00.000 2013-01-22 00:00:00.000 2013-01-23 00:00:00.000 2
Table1:
Closing Date
2013-04-26 00:00:00.000
2013-01-26 00:00:00.000
Table2:
Price Date
2013-04-24 00:00:00.000
2013-04-25 00:00:00.000
2013-04-26 00:00:00.000
2013-01-22 00:00:00.000
2013-01-23 00:00:00.000
2013-01-24 00:00:00.000
对于表1中的每个日期,我只想从表2中提取前5天内最接近的日期,然后将其指定为匹配或非匹配
我有以下代码
CASE Table2.PricingDate
WHEN Table1.[ClosingDate] THEN 'MATCH'
WHEN DATEADD(D,-1, Table1.[ClosingDate]) THEN 'NONMATCH'
WHEN DATEADD(D,-2, Table1.[ClosingDate]) THEN 'NONMATCH'
WHEN DATEADD(D,-3, Table1.[ClosingDate]) THEN 'NONMATCH'
WHEN DATEADD(D,-4, Table1.[ClosingDate]) THEN 'NONMATCH'
WHEN DATEADD(D,-5, Table1.[ClosingDate]) THEN 'NONMATCH'
END [Match]
FROM Table2 INNER JOIN Table1
ON Table2.PricingDate
BETWEEN DATEADD(D,-5,Table1.[ClosingDate]) AND Table1.[ClosingDate]
WHERE
CASE Table2.PricingDate
WHEN Table1.[ClosingDate] THEN 'MATCH'
WHEN DATEADD(D,-1, Table1.[ClosingDate]) THEN 'NONMATCH'
WHEN DATEADD(D,-2, Table1.[ClosingDate]) THEN 'NONMATCH'
WHEN DATEADD(D,-3, Table1.[ClosingDate]) THEN 'NONMATCH'
WHEN DATEADD(D,-4, Table1.[ClosingDate]) THEN 'NONMATCH'
WHEN DATEADD(D,-5, Table1.[ClosingDate]) THEN 'NONMATCH'
END IS NOT NULL
问题在于,这会为每个ClosingDate返回多个PricingDate:
**Closing Date Price Date Match**
2013-04-26 00:00:00.000 2013-04-24 00:00:00.000 NONMATCH
2013-04-26 00:00:00.000 2013-04-25 00:00:00.000 NONMATCH
2013-04-26 00:00:00.000 2013-04-26 00:00:00.000 MATCH
2013-01-26 00:00:00.000 2013-01-22 00:00:00.000 NONMATCH
2013-01-26 00:00:00.000 2013-01-23 00:00:00.000 NONMATCH
2013-01-26 00:00:00.000 2013-01-24 00:00:00.000 NONMATCH
我只想让它返回:
**Closing Date Price Date Match**
2013-04-26 00:00:00.000 2013-04-26 00:00:00.000 MATCH
2013-01-26 00:00:00.000 2013-01-24 00:00:00.000 NONMATCH
我怎样才能让它在每个结束日期只返回一个pricingDate?
非常感谢你的帮助 假设您正在使用SQL Server:
select
T1.[Closing Date], T2.[Price Date],
case
when T1.[Closing Date] = T2.[Price Date] then 'MATCH'
else 'NONMATCH'
end as [Match]
from Table1 as T1
outer apply (
select top 1 T2.[Price Date]
from Table2 as T2
where
T2.[Price Date] <= T1.[Closing Date] and
T2.[Price Date] >= dateadd(day, -5, T1.[Closing Date])
-- you can use between, I just like >= <= syntax more
-- T2.[Price Date] between T1.[Closing Date] and dateadd(day, -5, T1.[Closing Date])
order by T2.[Price Date] desc
) as T2
假设您正在使用SQL Server:
select
T1.[Closing Date], T2.[Price Date],
case
when T1.[Closing Date] = T2.[Price Date] then 'MATCH'
else 'NONMATCH'
end as [Match]
from Table1 as T1
outer apply (
select top 1 T2.[Price Date]
from Table2 as T2
where
T2.[Price Date] <= T1.[Closing Date] and
T2.[Price Date] >= dateadd(day, -5, T1.[Closing Date])
-- you can use between, I just like >= <= syntax more
-- T2.[Price Date] between T1.[Closing Date] and dateadd(day, -5, T1.[Closing Date])
order by T2.[Price Date] desc
) as T2