Sql 与MS Access中的最大()函数等效?
是否有一个等效的Sql 与MS Access中的最大()函数等效?,sql,ms-access,Sql,Ms Access,是否有一个等效的[GREATEST()]函数,我可以将其编码到MS Access SQL语句中?我有一个带有几个日期字段的项目编号表。我想返回一个指定最近日期的输出。实际上,这表明了特定项目的状态 +------------+------------+------------+-----------+------------+-----------+ |ProjectNum | CondCommit | FirmCommit | FundAgt |支付|服务| +------------+---
[GREATEST()]
函数,我可以将其编码到MS Access SQL语句中?我有一个带有几个日期字段的项目编号表。我想返回一个指定最近日期的输出。实际上,这表明了特定项目的状态
+------------+------------+------------+-----------+------------+-----------+
|ProjectNum | CondCommit | FirmCommit | FundAgt |支付|服务|
+------------+------------+------------+-----------+------------+-----------+
| 1898 | | 1/30/2008 | 2/21/2008 | 6/18/2008 | 6/21/2010 |
| 1906 | 12/20/2004 | 5/19/2006 | 5/3/2006 | 4/6/2006 | 4/5/2007 |
| 1918 | 3/31/2009 | 11/19/2009 | 3/24/2010 | 12/22/2010 | |
| 1956 | 3/31/2009 | | 3/5/2010 | | |
+------------+------------+------------+-----------+------------+-----------+
我知道我可以使用一个开关
函数来比较两个日期,但我必须在五个字段中找到最近的日期。理想情况下,我希望输出如下所示:
+------------+------------+------------+
|ProjectNum | Status | StatusDt|
+------------+------------+------------+
|1898年|维修| 2010年6月21日|
|1906年|维修| 4/5/2007|
|1918年|支付日期| 2010年12月22日|
|1956年|基金会| 3/5/2010|
+------------+------------+------------+
我愿意尝试各种各样的函数,但我希望将代码保存在SQL中。如果我必须将输出发送到另一个应用程序进行处理,这有点违背了使用SQL的初衷。以下是您的解决方案:
Status
的表,其中包含一个名为Status
的列。用唯一的状态填充此字段table1
select
i.ProjectNum
,oo.Status
,i.StatusDt
from (
select
o.ProjectNum
,Max(o.StatusDt) as StatusDt
from (
select
t.ProjectNum
,t.[Status]
,iif(t.[Status] = 'CondCommit',a.CondCommit,
iif(t.[Status] = 'FirmCommit',a.FirmCommit,
iif(t.[Status] = 'FundAgt',a.FundAgt,
iif(t.[Status] = 'Disbursemt',a.Disbursemt,
iif(t.[Status] = 'Servicing',a.Servicing,null))))) as StatusDt
from
(
select
table1.ProjectNum
,Status.Status
from table1, Status
) as t
inner join table1 as a
on t.ProjectNum = a.ProjectNum
) as o
group by o.ProjectNum
) as i
inner join (
select
t.ProjectNum
,t.[Status]
,iif(t.[Status] = 'CondCommit',a.CondCommit,
iif(t.[Status] = 'FirmCommit',a.FirmCommit,
iif(t.[Status] = 'FundAgt',a.FundAgt,
iif(t.[Status] = 'Disbursemt',a.Disbursemt,
iif(t.[Status] = 'Servicing',a.Servicing,null))))) as StatusDt
from
(
select
table1.ProjectNum
,Status.Status
from table1, Status
) as t
inner join table1 as a
on t.ProjectNum = a.ProjectNum
) as oo
on i.ProjectNum = oo.ProjectNum
and i.StatusDt = oo.StatusDt
注:
- 您可以(可能应该)将子查询保存为单独的查询,然后通过引用子查询名称简化上面的查询
- 但是,我的原始SQL可以按原样运行