我有一个简单的表,包括unit_id oid,时间戳,diag bytea。主键是time和unit_id的组合。 + ?' {1 u% _9 J) Y$ ?该查询的目的是为每个唯一的unit_id获得最新的行(最大时间戳)。然而,并不总是回到每一个最新时间。unit_id的行。+ Y( B3 s1 v* N& m) N
我真的只想按unit_id但是postgres也让我用diag,因为我正在选择它。" ]8 C, ]7 e1 I2 |1 r( m! u
SELECT DISTINCT ON(unit_id) max(time) as time,diag,unit_id FROM diagnostics.unit_diag_history GROUP BY unit_id,diag 8 `$ Y. T) Z6 X解决方案: e4 p$ |- m9 _0 f% K! [ N
每当你开始考虑本地化时GROUP ; L m7 ]+ J" B) G; R7 A8 WBY窗口函数应开始考虑。 5 x8 M4 H" J6 e* p8 A我想你在追求这样的事情: ' U9 L m) B( F, ^7 \select unit_id,time,diagfrom select unit_id,time,diag, rank() over (partition by unit_id order by time desc) as rank from diagnostics.unit_diag_history) as dtwhere rank = 1您可能想在ORDER BY添加一些内容总是打破关系,但这不会改变整体技术。