2012-07-23 83 views
1

办公室10在混合的Windows 7/Windows XP中环境选择第一个地址我使用访问需要在Access数据库

我需要能够从列表中选择员工的当前地址。我的问题是,地址datefrom可能是过去,未来null

删除未来的标准显然是容易的,即WHERE datefrom <=date()

我的问题是,在地址数据的初始进口,大部分地址没有这个信息,所以该字段为空。数据的下面是一个例子:(日期格式dd/mm/yyyy

ID EmployeeID Postcode DateFrom 
1 1   AB12 3CD [null] 
2 2   GH12 5RF [null] 
3 1   CD34 5EF 10/03/2012 
4 3   HA25 3PO [null] 
5 3   HA4 7RT 04/06/2012] 
6 3   DB43 5YU 12/11/2011] 

我所需的输出是:(为了员工不重要的)

ID EmployeeID Postcode DateFrom 
2 2   GH12 5RF [null] 
3 1   CD34 5EF 10/03/2012 
5 3   HA4 7RT 04/06/2012 

我试图通过整理这DateFrom DESC不订购清单如下:

ID EmployeeID Postcode DateFrom 
3 1   CD34 5EF 10/03/2012 
1 1   AB12 3CD [null] 
2 2   GH12 5RF [null] 
5 3   HA4 7RT 04/06/2012 
6 3   DB43 5YU 12/11/2011 
4 3   HA25 3PO [null] 

所以,如果我能那么只是为每个员工采取第一个结果,我会没事的。不过,我尝试过(并且失败)做SQL,包括像DISTINCT,first()GROUP BY这样的东西,但似乎无法获取任何地方。

我可能只是看不到明显的答案,所以任何帮助将非常感激。

回答

0

使用ORDER BY这样的:

ORDER BY (CASE WHEN [DateFrom] IS NULL THEN 1 ELSE 0 END) DESC, 
     [DateFrom] DESC 

我找到了答案,从this岗位。请确保先搜索。

+2

SQL是一个通用术语。 CASE在MS Access SQL中不可用。 – Fionnuala 2012-07-23 09:58:08

0

如何:

SELECT Adr.ID, Adr.EmployeeID, Adr.Postcode, Adr.DateFrom 
FROM Adr 
WHERE (((Adr.ID) In 
    (SELECT Top 1 ID 
    FROM adr b 
    WHERE b.EmployeeID=Adr.EmployeeID 
    ORDER BY DateFrom DESC))); 

以上使用查询设计wondow而建,所以一半的括号是不必要的,但是,如果你正在使用的查询设计窗口,你不妨离开他们。

0

您能否简单地将null的值更新为像1900-01-01这样的设置日期?