选择具有相同 SSN 和 MAX 处理日期的用户

问题描述 投票:0回答:1

我需要帮助编写执行此操作的查询。我需要找到所有具有 MAX Process 日期的用户。所以在数据库中,经常会有同一个人但处理日期不同的多条记录。 我需要为每个 ssn 获取 1 条具有最大处理日期的记录。

PROCESS_DATE | SSN         | Amount  | CODE
11/12/2024   | 00-47-0004  | 111.11  | 1
11/11/2024   | 00-47-0004  | 22.2    | 2
11/12/2024   | 00-47-0004  | 0.00    | 13
11/10/2024   | 00-45-0042  | 0.00    | 2
11/09/2024   | 00-45-0012  | 7.77    | 5

我使用带有最大处理日期的子查询,通过 SSN 和处理日期获取 row_number(),然后选择第一行。 预计

PROCESS_DATE | SSN         | Amount  | CODE
11/12/2024   | 00-47-0004  | 111.11  | 1
11/10/2024   | 00-45-0042  | 0.00    | 2

但是当记录大小超过一百万时,此查询会失败。 当前查询

SELECT SSN,
       PROCESS_DATE,
       AMOUNT,
       CODE 
FROM ( SELECT SSN,
              PROCESS_DATE,
              AMOUNT,
              CODE, 
              ROW_NUMBER() OVER (PARTITION SSN ORDER BY PROCESS_DATE) AS RN FROM TABLE 
      ) AS RANK 
WHERE RN = 1 ORDER BY SSN;

有什么优化查询的建议吗?

sql database db2 subquery
1个回答
0
投票

在处理之前,您将整个表拖到临时空间中。 相反,执行子查询以通过 SSN 获取最大日期,然后使用它来过滤您的表。

Select mytable.*
From mytable inner join
  (Select SSN, max(Process_Date) as last
    From mytable
    Group by SSN) filter
  On mytable.SSN=filter.SSN and
     mytable.Process_Date=filter.last

如果您有数百万人且互动相对较少,这可能仍然会失败。但我怀疑子查询将归结为适合您的临时空间的较小大小。

© www.soinside.com 2019 - 2024. All rights reserved.