需要在Access数据库中选择第一个地址

时间:2012-07-23 09:36:37

标签: sql ms-access

我在混合 Windows 7 / Windows XP 环境中的 Office 10 中使用 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 ,包括DISTINCTfirst()GROUP BY之类的东西,但似乎无法获得任何地方。

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

3 个答案:

答案 0 :(得分:0)

使用这样的顺序:

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

我从this帖子找到答案。请务必先搜索。

答案 1 :(得分: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构建的,所以括号的一半是不必要的,但是,如果你使用查询设计窗口,你也可以留下它们。

答案 2 :(得分:0)

您是否可以简单地将null值更新为1900-01-01之类的设定日期?