访问单个表中具有最新日期(包括空日期)的SQL唯一记录



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

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列的唯一记录,每个唯一Identifier具有最新日期。不幸的是,在DateWhenStatusObserved列中也有日期为NULL的记录,在许多情况下,标识符(地理站点)的唯一记录的日期为NULL。

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

如何在MIN或MAX中包含空值?

仅选择具有最大日期或空的行

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日期的情况呢?

如果能为这个问题找到接近最优的查询,我将不胜感激。

感谢

您需要提供与BasicInfoTable.DateWhenStatusObserved=Table2.MaxDate类似的(为NULL)逻辑。不能"比较"NULL。

最新更新