繁体   English   中英

SQL:使用CASE并仅返回最大值

[英]SQL: Using CASE and returning only max value

对于此问题中的任何新手遗漏或晦涩之处,请先就此道歉。

我有两个要在某个日期加入的表。

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

我只想为Table1中的每个日期从Table2拉最近的日期(在过去5天之内),然后将其分配为“ MATCH”或“ NONMATCH”。

我有以下代码

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

我如何才能为每个closeingDate只返回一个PriceingDate? 非常感谢您的帮助!

假设您正在使用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小提琴演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM