2013-10-03 45 views
0

的我在一个MS Access如下表有2010数据库:MS Access查询选择最快两个日期值

CommTable 
    pkID 
    fkID 
    Level 
    type1Date 
    type2Date 

,我需要选择级别,并在两个日期字段的最快值的一个给定fkID的值。下面是SQL可能看起来像一些伪代码:

SELECT Level, date FROM CommTable WHERE fkID=2 
If Type1Date<Type2Date{date=Type1Date} 
Else {date=Type2Date} 

这显然是不正确的SQL。有人可以告诉我在MS Access SQL中编写这个语法的正确语法吗?

回答

2

你可以使用Iif,但我必须承认,我不知道,你可以有领域truepart/falsepart

select level, Iif(type1Date < type2Date, type1Date, type2Date) 
FROM CommTable 
WHERE fkID=2; 

你也可以(但再次尝试,我无法测试它,不知道你是否可以在访问子查询中使用UNION)。

select a.level, min(a.dte) 
FROM 
(select level, type1Date as dte 
FROM CommTable WHERE fkId =2 
UNION 
select level, type2Date as dte 
FROM CommTable WHERE fkId = 2 
) as a 
GROUP BY a.level 
+0

+1。日期比较工作,并感谢你提醒我关于Iif。我不知道Iif是SQL的一部分,但我在VBA中使用它。您的回复不会返回日期值。你如何改变你的代码,使其与Level一起返回两个日期值中最快的值? – CodeMed

+0

@CodeMed嗯,我没有得到访问...访问。那么,我的答案是什么?只是一个字符串'type1Date'或'type2Date'? –

+0

您的代码返回两列。 Level和Expr1001。级别有一个值,但Expr1001是空的。毕竟Access可能无法读取Iif中的日期。 – CodeMed

2

小调整为快速响应提供日期字段名

select 
    Level 
, iif(type1Date < type2Date, type1Date, type2Date) as [date] 
from CommTable 
where fkID = 2 
+0

谢谢。 +1显示如何获取字段名称。不过,我确实最终使用了UNION方法而不是Iif。 – CodeMed