我有一個交易數據表,它是對未來的預測。因此,由相同的日期,類型,位置和產品確定的相同預測因此被多次讀取,因爲預測隨着時間的推移變得更準確並且被重新發送。從多列分組的行中選擇最大值的行(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