我有物品和校准表。一个项目可以有很多校准。我需要列出具有date_expired校准的项目,但只显示带有" MAX"的项目。 date_expired(巫婆是必须校准的日期)。意味着如果一个项目有2个校准,则仅列出具有MAX日期的项目。使用postgress和ruby。 我有类似的东西,不知道它是否存在更好的方式使用...
SELECT *, date_expired
FROM Items
LEFT OUTER JOIN Calibrations
ON Calibrations.item_id = Items.id
GROUP BY Items.id, calibrations.date_expired
HAVING calibrations.date_expired ...
如果你能帮助我,不知道MAX(date_expired)的介绍地点。 TKS
UPDATE
项目
身份证号码
1 AAA
2 BBB
3 CCC
校准
id item_id date_expired
1 1 2014/12/12
2 1 2015/12/12
结果
id name date_exired
1 AAA 2015/12/12
答案 0 :(得分:0)
SELECT i.Id, MAX(c.date_expired )
FROM Items i
LEFT OUTER JOIN Calibrations c ON I.id = C.item_id
GROUP BY Items.id
答案 1 :(得分:0)
这应该可以解决问题:
SELECT DISTINCT ON (i.id)
i.id, i.name, c.date_expired
FROM Items i
JOIN Calibrations c ON c.item_id = i.id
ORDER BY i.id, c.date_expired desc
使用JOIN
而不是LEFT JOIN
,您只能获得带校准的项目。然后DISTINCT ON过滤结果,为每个项目提供一次校准。由于它的选择基于订单,因此date_expired desc
的排序始终为我们提供最新的校准。