繁体   English   中英

在 SQL 中选择多个最大值

[英]Selecting multiple max values in SQL

我有一个看起来像这样的表:

| client_id | program_id | provider_id | date_of_service | data_entry_date | data_entry_time |
| --------- | ---------- | ----------- | --------------- | --------------- | --------------- |
|         2 |          5 |           6 | 02/02/2022      | 02/02/2022      | 0900            |
|         2 |          5 |           6 | 02/04/2022      | 02/04/2022      | 1000            |
|         2 |          5 |           6 | 02/04/2022      | 02/04/2022      | 1700            |
|         2 |          5 |           6 | 02/04/2022      | 02/05/2022      | 0800            |
|         2 |          5 |           6 | 02/04/2022      | 02/05/2022      | 0900            |

我需要输入最近的服务日期。 换句话说:最大date_of_service与最大data_entry_date与最大data_entry_time

从上表中,所需的结果/行是:

date_of_service = 02/04/2022, data_entry_date = 02/05/2022, data_entry_time = 0900

这将与主表保持连接。

我的 SQL 查询如下所示,但我无法让它返回所需的服务日期结果。

SELECT table1.client_id, table1.program_id, table1.provider_id, note.date_of_service
FROM table1
WHERE provider_id = '6'

LEFT JOIN
  (SELECT TOP(1) client_id, program_id, provider_id, date_of_service, data_entry_date, data_entry_time
  FROM table2
  ORDER BY date_of_service DESC, data_entry_date DESC, data_entry_time DESC
  ) as note
  ON note.client_id = table1.client_id
  AND note.program_id = table1.program_id
  AND note.provider_id = table1.provider_id

我尝试了MAXORDER BYJOIN的多种变体的各种组合,但还没有找到一种有效的组合。

我不知道我的 SQL 数据库是什么版本,但它似乎无法处理 window 函数,如OVERPARTITION或其他类似COALESCE的函数。 我一直在使用 DBeaver 22.2.0 来测试 SQL 脚本。

根据您提供的内容,您可以简单地查询 table2:

SELECT client_id, program_id, provider_id, MAX(date_of_service), MAX(data_entry_date), MAX(data_entry_time)
FROM table2
GROUP BY client_id, program_id, provider_id

如果需要将此结果集加入table1,只需加入上面关于client_id、program_id、provider_id的语句即可

尝试使用以下查询。 这仅使用连接和子查询。

SELECT TOP 1 * FROM table1 t1
JOIN (
       SELECT 
                 MAX(date_of_Service) AS Max_date_of_Service
                ,MAX(data_entry_date) AS Max_data_entry_date 
       FROM  table1
       WHERE date_of_Service = (SELECT MAX(date_of_Service) FROM table1)
     )t2
ON   t1.date_of_Service = t2.Max_date_of_Service
AND  t1.data_entry_date = t2.Max_data_entry_date
ORDER BY data_entry_time

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM