【发布时间】:2018-07-17 08:22:34
【问题描述】:
我编写了一个小的选择查询,它是我用来从 PostgreSQL DB 中的几个表中检索具有附加属性的项目的较大查询的一部分。
SELECT
isni.inventory_id_inventory,
max(isni.issue_note_id_issue_notes) AS latest_issue_note,
isn.direction
FROM issue_note_items isni
JOIN issue_notes isn ON isni.issue_note_id_issue_notes = isn.id
GROUP BY isni.inventory_id_inventory, isn.direction
我只需要为每个带有inventory_id_inventory 键的表获取一条记录,其中issue_note_id_issue_notes 值最高。或者换句话说,我想找到一个,最后一个问题说明,其中包含每个不同库存 ID 的方向。
我得到的是一两行 - 如果有两个不同的方向(此列中可能有两个小的 int 值)。看起来很简单,应该使用左连接来修复,但它不能按预期工作,可能是因为GROUP BY 子句。我应该怎么做才能使其按预期工作?
表格和示例数据:issue_notes
ID direction
1 1
2 2
3 2
4 1
5 2
6 1
issue_note_items
ID inventory_id_inventory issue_note_id_issue_notes
1 12 1
2 123 1
3 12 2
4 12 4
5 35 4
6 123 5
7 35 6
预期输出:
ID inventory_id_inventory issue_note_id_issue_notes direction
4 12 4 1
6 123 5 2
7 35 6 1
非常感谢您的帮助
【问题讨论】:
-
请在您的问题中包含示例数据、表格定义和预期输出
-
如果你只想要一行,所有分组的列都需要有一个精确的值。在您的情况下,
isn.direction有 2 个值。因此,您得到 2 行,因为 id1 和方向 1 的值与 id1 和方向 2 不同。如果您想每个...id_inventory只返回一行,则必须仅按此分组并选择max(isn.direction) -
@MKhalidJunaid 抱歉回复晚了,我的办公桌上还有一些其他项目要完成。我已经提供了一些额外的信息,我希望它有助于找到解决方案。
-
@Chrᴉz 我理解你的建议。现在我可以看到问题所在。但我仍然无法解决它。我不能输入 max(isn.direction),因为我想检索数据,库存的最后一个问题说明的方向是什么。使用 MAX 我只得到那些带有 '2' 的。
标签: postgresql join max