我有一个包含以下示例结构的表:
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
然而,这些并不具体说明如何使用具有聚合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日期案例呢?
对于找到针对此问题的近乎最佳查询,我将不胜感激。
由于
答案 0 :(得分:0)
您需要为BasicInfoTable.DateWhenStatusObserved = Table2.MaxDate提供类似的(is NULL)逻辑。无法“比较”无效。