我有一个简单的表,包括unit_id oid,时间戳,diag bytea。主键是time和unit_id的组合。8 O0 a& `9 D" r& B
该查询的目的是为每个唯一的unit_id获得最新的行(最大时间戳)。然而,并不总是回到每一个最新时间。unit_id的行。 # y7 d4 E L/ B) ?% E, W# A我真的只想按unit_id但是postgres也让我用diag,因为我正在选择它。 ]" n/ C, g* ?+ ~5 b
SELECT DISTINCT ON(unit_id) max(time) as time,diag,unit_id FROM diagnostics.unit_diag_history GROUP BY unit_id,diag ( S5 [% d9 Y5 k' [$ n 解决方案: 3 J$ `0 Q1 l9 D9 `- K. l0 B 每当你开始考虑本地化时GROUP) r- W% p% v% m5 f6 z0 ~: f" t9 B
BY窗口函数应开始考虑。2 [! C; x. I0 X- R; b
我想你在追求这样的事情:! F, Q( m' u4 [" q
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添加一些内容总是打破关系,但这不会改变整体技术。