我有一个交易数据表,它是对未来的预测。因此,由相同的日期,类型,位置和产品确定的相同预测因此被多次读取,因为预测随着时间的推移变得更准确并且被重新发送。从多列分组的行中选择最大值的行(PSQL)
我想创建一个查询,将相同类型和相同位置,产品和日期的事务分组,然后从这些组中仅选择具有最新更新时间戳的组。
该表具有现在的行数十万和随着时间的推移,数以百万计,所以相当有效的解决方案,将不胜感激:)
实施例的表:
date | location_code | product_code | quantity | type | updated_at
------------+------------------+---------------+----------+----------+------------
2013-02-04 | ABC | 123 | -26.421 | TRANSFER | 2013-01-12
2013-02-07 | ABC | 123 | -48.1 | SALE | 2013-01-10
2013-02-06 | BCD | 234 | -58.107 | SALE | 2013-01-11
2013-02-06 | BCD | 234 | -60 | SALE | 2013-01-10
2013-02-04 | ABC | 123 | -6.727 | TRANSFER | 2013-01-10
期望的结果:
date | location_code | product_code | quantity | type | updated_at
------------+------------------+---------------+----------+----------+------------
2013-02-04 | ABC | 123 | -26.421 | TRANSFER | 2013-01-12
2013-02-07 | ABC | 123 | -48.1 | SALE | 2013-01-10
2013-02-06 | BCD | 234 | -58.107 | SALE | 2013-01-11
我试过例如:
SELECT t.date, t.location_code, t.product_code, t.quantity, t.type, t.updated_at
FROM transactions t
INNER 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;
但这似乎需要很长时间,似乎并不奏效。
谢谢你的帮助!
你是在正确的轨道上加入更有效。只需在子查询中添加更多字段并加入其中。 – 2013-03-16 22:33:37