从按多列分组的行组中选择具有最大值的行(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 |
|
|
|
|
|