1

我在混合的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,但似乎无法到达任何地方。

我可能只是看不到简单明显的答案,因此非常感谢任何帮助。

4

3 回答 3

0

你能简单地将null值更新为一个设定的日期1900-01-01吗?

于 2012-07-24T09:38:25.167 回答
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 )));

以上是使用查询设计窗口构建的,所以一半的括号是不必要的,但是,如果您使用的是查询设计窗口,您不妨留下它们。

于 2012-07-23T09:56:13.313 回答
0

像这样使用 order by:

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

我从这篇文章中找到了答案。请务必先搜索。

于 2012-07-23T09:40:32.390 回答