2013-10-03 46 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