使用最新日期访问SQL唯一记录,包括单个表中的空日期

时间:2015-03-17 20:14:53

标签: sql ms-access-2010

我有一个包含以下示例结构的表:

Identifier| Latitude | Longitude |...many columns...|DateWhenStatusObserved|ID|
----------+----------+---------- +------------------+----------------------+--+
2823DC012 | 28.76285 | 23.70195  |  ...             |            1994/10/28| 1|
2823DC012 | 28.76285 | 23.70195  |  ...             |            1995/04/05| 2|
2822DD030 | 28.76147 | 22.98270  |  ...             |                  NULL| 3|
...

还有更多列,但不必对这些列进行评估,只应从查询中返回所有列。

我希望SQL查询只返回Identifier列的唯一记录,并使用每个唯一标识符的最新日期。遗憾的是,DateWhenStatusObserved列中的日期记录为NULL,在许多情况下,标识符(地理位置)的唯一记录具有NULL日期。

类似的SQL问题已经有很多答案,例如:

How can I include null values in a MIN or MAX?

SELECT only rows with either the MAX date or NULL

http://bytes.com/topic/access/answers/719627-create-query-evaluate-max-date-recognizing-null-high-value

然而,这些并不具体说明如何使用具有聚合Max函数的iif语句来允许NULL日期记录在保持唯一标识符(地理位置)记录的同时通过。

我只获得使用子查询和Max(IIF())组合返回的非NULL最大日期记录。我终于得到了一个没有Joins的基本子查询的合理结果,并且依赖于WHERE子句,但是我从NULL日期获得了重复的标识符记录,因为我必须使用OR而不是AND来获取任何返回的行。

这是我尝试仅返回非NULL最大日期记录之一:

SELECT BasicInfoTable.*
FROM Basic_information_WUA AS BasicInfoTable 
INNER JOIN 
(
SELECT Identifier, MAX (IIF(DateWhenStatusObserved IS NULL, 0, DateWhenStatusObserved)) AS MaxDate 
FROM Basic_information_WUA
GROUP BY Identifier
)  
AS Table2 ON BasicInfoTable.Identifier = Table2.Identifier AND BasicInfoTable.DateWhenStatusObserved = Table2.MaxDate;

那么为什么这不适用于NULL日期案例呢?

对于找到针对此问题的近乎最佳查询,我将不胜感激。

由于

1 个答案:

答案 0 :(得分:0)

您需要为BasicInfoTable.DateWhenStatusObserved = Table2.MaxDate提供类似的(is NULL)逻辑。无法“比较”无效。