我有一个具有以下示例结构的表:
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。