【发布时间】:2021-09-23 23:59:36
【问题描述】:
在我的表hms_bbr_group 中,因为group_id 列有多个副本,我试图让查询选择每个group_id 的最大值id,因此是DISTINCT
表:
例如,我希望我的查询只显示 id 61、group_id 36、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.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
ORDER BY
hbg.group_id ASC;
这里重要的几行是
DISTINCT ON (hbg.group_id)
MAX(hbg.id) AS id
我的问题是输出显示了最低的 id 值:
SQL 查询:
正如您从第一个屏幕截图中看到的那样,我得到的是id 36(最低)而不是group_id 36(最高)上的id 61
为了测试它,我尝试将 MAX 替换为 MIN,但输出仍然相同。
为什么我的 SQL 没有显示 MAX id 值?
【问题讨论】:
-
我添加了
postgresql标签,据我所知,它是唯一提供distinct on()的DBMS
标签: sql postgresql select max distinct