回答

收藏

Postgres选择所有列,但按一列分组

技术问答 技术问答 502 人阅读 | 0 人回复 | 2023-09-14

我有一个简单的表,包括unit_id oid,时间戳,diag bytea。主键是time和unit_id的组合。$ U6 I" ^* L0 F8 C- V- h5 |7 F
该查询的目的是为每个唯一的unit_id获得最新的行(最大时间戳)。然而,并不总是回到每一个最新时间。unit_id的行。
5 |' H& W7 ]' d% N5 x9 i我真的只想按unit_id但是postgres也让我用diag,因为我正在选择它。- U3 E8 A% v& j9 O/ G$ Q$ A
SELECT DISTINCT ON(unit_id) max(time) as time,diag,unit_id FROM diagnostics.unit_diag_history  GROUP BY unit_id,diag               
, _8 W1 _0 P- D" Y    解决方案:                                                               
7 Z& k6 C: k7 @% l8 k# p+ J6 g                                                                每当你开始考虑本地化时GROUP
  b: `, u; O8 u% C0 A( }% uBY窗口函数应开始考虑。# n* A' H6 r. K9 [' G
我想你在追求这样的事情:
4 S. j( J1 X* D2 S% E( s/ r4 Pselect 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添加一些内容总是打破关系,但这不会改变整体技术。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则