当前位置: 首页 > 知识库问答 >
问题:

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

张俊茂
2023-03-14

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

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查询仅返回标识符列的唯一记录以及每个唯一标识符的最新日期。不幸的是,在DateWhenStatusObsted列中也有日期为NULL的记录,并且在许多情况下,标识符(geosite)的唯一记录具有NULL日期。

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

如何在最小值或最大值中包含空值?

仅选择日期为MAX或NULL的行

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

然而,这些并不具体说明如何确切地使用带有聚合Max函数的iif语句来允许NULL日期记录通过,同时维护唯一标识符(geosite)记录。

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

以下是我仅返回非空的最大日期记录的尝试之一:

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个答案

益清野
2023-03-14

您需要提供与BasicInfoTable类似的(is NULL)逻辑。DateWhenStatusObserved=表2。MaxDate。空值不能“比较”。

 类似资料:
  • 问题内容: 使用以下查询和结果,我正在寻找ChargeId和ChargeType唯一的最新条目。 期望的: 问题答案: 您可以使用GROUP BY按类型和ID对项目进行分组。然后,您可以使用MAX()聚合函数来获取最近的服务月份。以下返回带有ChargeId,ChargeType和MostRecentServiceMonth的结果集

  • 我想根据月份对值进行分类,以便第一次过滤这些值 例如:-

  • 问题内容: 我下面有日期数组 并想知道 最近的日期, 例如:最接近今天的日期。 我怎样才能做到这一点? 问题答案: 循环执行,将值转换为日期,然后将最新的值存储在var中。 诸如此类的东西…您就知道了如果您想获得今天之前的最新信息:

  • 问题内容: 我有一个ID为,状态和员工日期范围的数据集。 下面给出的输入数据集是一名员工的详细信息。 记录中的日期范围是连续的(按确切顺序),因此第二行的开始日期将是第一行的结束日期的下一个日期。 如果员工连续休假不同的月份,则该表将存储日期范围不同的信息。 例如:在输入集中,员工已从‘16 -10-2016’休病假到‘31 -12-2016’,并在‘1-1-2017’重新加入。 因此,该项目有3

  • 问题内容: 我有一张桌子,如下所示: 请注意,MyDate格式为YYMMDD,而MyTime为24小时格式。 我想用最新的MyDate和MyTime返回唯一的MyKey的结果。预期的结果将是这样的: 任何帮助都感激不尽。谢谢。 问题答案: 首先,将日期和时间列合并为日期时间,以便轻松订购它们。自从我使用Sql Server以来已经有一段时间了,但是row_number()函数和分区是一种查找由另一

  • 问题内容: 我将对各种rpc调用的响应存储在具有以下字段的mysql表中: 为和的所有现有组合选择最新响应的最佳方法是什么? 对于每个日期,对于给定的方法/ ID,只能有一个响应。 并非所有呼叫组合在给定日期都必须存在。 有数十种方法,数千个ID和至少365个不同的日期 样本数据: 所需结果: (我不认为这是同一个问题-它不会给我最新的信息) 问题答案: 自我回答,但是随着表的增长,我不确定这是否