回答

收藏

从按多列分组的行组中选择具有最大值的行(PSQL)

技术问答 技术问答 278 人阅读 | 0 人回复 | 2023-09-12

我有一个交易数据表,这是对未来的预测。因此,随着时间的推移和重新发送的预测变得更加准确,可以多次阅读相同日期、类型、位置和产品标识的预测。
+ c  \3 M0 N; ]. L- `8 D5 U* u我想创建一个查询,分组相同类型、相同位置、产品和日期的交易,然后只选择最新时间戳的交易。
% ^4 z9 @0 s2 z+ Q3 v4 }  f该表现在有成千上万的行,随着时间的流逝,数百万行,因此,一个合理有效的解决方案将不胜感激7 u1 w) J7 A1 J+ r
表格示例:
' G' h% ]" i2 C$ I0 Wdate    |  location_code   | product_code  | quantity |   type   | updated_at ------------ ------------------ --------------- ---------- ---------- ------------2013-02-04 | ABC | 123 |  -26.421 | TRANSFER | 2013-01-122013-02-07 | ABC | 123 |    -48.1 | SALE | 2013-01-102013-02-06 | BCD | 234 |  -58.107 | SALE | 2013-01-112013-02-06 | BCD | 234 |      -60 | SALE | 2013-01-102013-02-04 | ABC | 123 |   -6.727 | TRANSFER | 2013-01-10理想结果:
( m0 W, b7 E7 u2 G& P; fdate    |  location_code   | product_code  | quantity |   type   | updated_at ------------ ------------------ --------------- ---------- ---------- ------------2013-02-04 | ABC | 123 |  -26.421 | TRANSFER | 2013-01-122013-02-07 | ABC | 123 |    -48.1 | SALE | 2013-01-102013-02-06 | BCD | 234 |  -58.107 | SALE | 2013-01-11例如,我试过:5 ~0 x' d  B+ O7 \( O/ g6 h; w: B
SELECT t.date,t.location_code,t.product_code,t.quantity,t.type,t.updated_atFROM transactions tINNER JOIN(   SELECT MAX(updated_at) as max_updated_at   FROM transactions   GROUP BY product_code,location_code,type,date) s on t.updated_at=max_updated_at;但这似乎需要很长时间,而且似乎不起作用。' U9 J8 @( i( s6 f) ]2 x; y0 i5 S
感谢您的帮助!
: i) g: L- ^& o$ j0 D- M                                                               
6 K0 I. o% C9 b  l  P( {, ^    解决方案:                                                                8 z) X8 y6 t/ ?2 ~! g, @  U
                                                                select distinct on ("date",location_code,product_code,type)    "date",   location_code,   product_code,   quantity,   type,   updated_atfrom transactions torder by t."date",t.location_code,t.product_code,t.type,t.updated_at desc
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则