SQL:选择 Distinct 和 Max 显示最低值而不是最高值

在我的表 hms_bbr_group 中,因为列 group_id 有多个副本,我试图让查询选择每个 id 的最高值 group_id,因此与众不同

表格:

1

例如,我希望我的查询仅显示 id 61,group_id 36,in group_name Infection Control 不考虑其他 ID,因为我只想要最高值

我的 SQL 选择:

SELECT DISTINCT ON (hbg.group_id)
    MAX(hbg.id) AS id,hbg.group_id,hbg.group_name,hbg.group_description,hbg.group_type_id,hbgt.group_type_name,hbg.category_id,hbg.effective_start_datetime,hbg.created_by,hbg.created_datetime,hbg.archived_by,hbg.archived_datetime
FROM 
    hms_bbr_group hbg
LEFT JOIN 
    hms_bbr_group_type hbgt ON (hbg.group_type_id = hbgt.group_type_id)
GROUP BY 
    hbg.group_id,hbg.archived_datetime 
ORDER BY 
    hbg.group_id ASC;

这里重要的几行是

DISTINCT ON (hbg.group_id)
MAX(hbg.id) AS id

我的问题是输出显示的是最低的 id 值:

SQL 查询:

2

正如您从第一个屏幕截图中看到的,不是在 id 61(最高)上获得 group_id 36,而是获得 id 36(最低)

为了测试它,我尝试用 MIN 替换 MAX,但输出仍然相同。

为什么我的 SQL 没有显示 MAX id 值?

czq40034234 回答:SQL:选择 Distinct 和 Max 显示最低值而不是最高值

您对 DISTINCT ON 的使用不正确,您无需在此处使用 GROUP BY。只需在 select 子句的括号中列出用于考虑每个组的列。然后在 ORDER BY 子句中重复该列first,然后是用于选择每个组中第一条记录的列。

SELECT DISTINCT ON (hbg.group_id)
    hbg.group_id,hbg.id AS id,hbg.group_name,hbg.group_description,hbg.group_type_id,hbgt.group_type_name,hbg.category_id,hbg.effective_start_datetime,hbg.created_by,hbg.created_datetime,hbg.archived_by,hbg.archived_datetime
FROM hms_bbr_group hbg
LEFT JOIN hms_bbr_group_type hbgt
    ON hbg.group_type_id = hbgt.group_type_id
ORDER BY
    hbg.group_id,hbg.id DESC;
本文链接:https://www.f2er.com/93890.html

大家都在问