gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:32:55 25 4
gpt4 key购买 nike

我有一个交易数据表,它是对 future 的预测。相同的预测,由相同的日期、类型、位置和产品标识,因此会被多次读取,因为随着时间的推移预测会变得更加准确并重新发送。

我想创建一个查询,将相同类型、相同位置、产品和日期的交易分组,然后仅从这些组中选择具有最新更新时间戳的交易。

该表现在有数十万行,随着时间的推移,将增加数百万行,因此我们将不胜感激一个相当有效的解决方案:)

示例表:

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;

但这似乎需要很长时间而且似乎不起作用。

感谢您的帮助!

最佳答案

select distinct on ("date", location_code, product_code, type)
"date",
location_code,
product_code,
quantity,
type,
updated_at
from transactions t
order by t."date", t.location_code, t.product_code, t.type, t.updated_at desc

关于sql - 从按多列分组的行组中选择具有最大值的行(PSQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15455368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com