我在混合 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 ,包括DISTINCT
,first()
和GROUP BY
之类的东西,但似乎无法获得任何地方。
我可能只是看不到明显的答案,所以任何帮助都会非常感激。
答案 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
之类的设定日期?