Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用Case语句比较四列并将最早日期添加到新列_Sql_Sql Server - Fatal编程技术网

Sql 使用Case语句比较四列并将最早日期添加到新列

Sql 使用Case语句比较四列并将最早日期添加到新列,sql,sql-server,Sql,Sql Server,我想写一个列,列出四列中最早的日期。我试过用一个案例陈述和一个tin来列出s.Open_日期,相反,它将2020年1月1日放在列中。这是数据 tin S.Open_Date LoanOpen CCOpenDate MortgageDate EarliestDate 1 5/5/2015 11/19/2018 null 9/25/2017 1/1/2020 因此,在上面的示例中,最早的日期列中应该有

我想写一个列,列出四列中最早的日期。我试过用一个案例陈述和一个tin来列出s.Open_日期,相反,它将2020年1月1日放在列中。这是数据

tin     S.Open_Date     LoanOpen    CCOpenDate    MortgageDate    EarliestDate
1        5/5/2015        11/19/2018    null        9/25/2017         1/1/2020
因此,在上面的示例中,最早的日期列中应该有5/5/2015

我已将整个查询放在下面。也就是说,除了Case语句外,查询中的所有内容都正常工作。有更好的方法吗

select i.mem, min(s.open_date) as ShareOpenDate, min(l.loanopen) as LoanOpen, min(ecc.cc_opendate) as CCopenDate, min(m.MortgageDate) as MortgageDate,

Case
when (s.open_date > l.loanopen and s.open_date > ecc.cc_opendate AND s.open_date > m.MortgageDate) then s.open_date
when (l.loanopen > s.open_date and l.loanopen > ecc.cc_opendate AND l.loanopen > m.MortgageDate) then l.loanopen
when (ecc.cc_opendate > s.open_date and ecc.cc_opendate > l.loanopen AND ecc.cc_opendate > m.MortgageDate) then ecc.cc_opendate
when (m.MortgageDate > s.open_date and m.MortgageDate > l.loanopen AND m.MortgageDate > ecc.cc_opendate) then m.MortgageDate
else '1/1/2020' END as EarliestDate

from individual as i
inner join membershipparticipant as mp on i.individual_id=mp.individual_id and mp.participation_type=101
inner join share as s on mp.member_nbr=s.member_nbr

#Subquery to bring in loan information
left outer join (
select member_nbr, min(open_date) as loanopen
from loan as l
group by member_nbr
)l  on s.member_nbr=l.member_nbr

#Subquery to bring in CC Information
left outer join ( 
select savings_acct_nbr, min(open_date) as cc_opendate
from externalcreditcard
group by savings_acct_nbr
) ecc on s.member_nbr=ecc.savings_acct_nbr

Subquery to bring in mortgage information
left outer join (
select MC_PMT_MBR_NBR as MortgageMember, min(MC_Loan_Date) as MortgageDate
from EXTERNALMORTGAGEMC
group by MC_PMT_MBR_NBR
)m on s.member_nbr=m.MortgageMember

group by i.mem

最简单的方法是在
SELECT
中使用子查询,尽管这可能会对性能产生一些影响:

SELECT
...
, (SELECT MIN(x)
    FROM (VALUES
      (l.loanopen),
      (s.open_date),
      (ecc.cc_opendate),
      (m.MortgageDate),
      ('1/1/2020')
   ) AS v (x)) AS EarliestDate
FROM ...
case
是一个表达式,而不是
语句