访问 SQL 个具有最新日期的唯一记录,包括单个 table 中的空日期
Access SQL unique records with latest date including null dates from single table
我有一个 table 具有以下示例结构:
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|
...
还有更多的列,但不必评估这些列,所有列都应该 return 从查询中编辑。
我希望 SQL 查询 return 只有标识符列的唯一记录,每个唯一标识符都有最新日期。不幸的是,在 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 日期记录通过,同时保持唯一标识符(geosite)记录。
我只得到非 NULL 最大日期记录 return 使用子查询和 Max(IIF()) 的组合。我终于从没有连接的基本子查询中得到了一个合理的结果,并且依赖于 WHERE 子句,但是我从 NULL 日期得到了重复的标识符记录,因为我必须使用 OR 而不是 AND 来获取任何行 returned.
这是我的尝试之一 return 仅记录非 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)逻辑。空值不能是 "compared".
我有一个 table 具有以下示例结构:
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|
...
还有更多的列,但不必评估这些列,所有列都应该 return 从查询中编辑。
我希望 SQL 查询 return 只有标识符列的唯一记录,每个唯一标识符都有最新日期。不幸的是,在 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 日期记录通过,同时保持唯一标识符(geosite)记录。
我只得到非 NULL 最大日期记录 return 使用子查询和 Max(IIF()) 的组合。我终于从没有连接的基本子查询中得到了一个合理的结果,并且依赖于 WHERE 子句,但是我从 NULL 日期得到了重复的标识符记录,因为我必须使用 OR 而不是 AND 来获取任何行 returned.
这是我的尝试之一 return 仅记录非 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)逻辑。空值不能是 "compared".