gpt4 book ai didi

Oracle 到 Postgres SQL 语法转换

转载 作者:行者123 更新时间:2023-11-29 12:17:10 28 4
gpt4 key购买 nike

我正在处理 Oracle 到 Postgres 的转换,我被一段代码困住了,这让我抓狂。我不确定如何在 Postgres 中使用 SUM(VALUE) KEEP (DENSE_RANK FIRST ORDER BY START_DATE DESC) AS LATEST_VALUE

我提到了 this page那对我不起作用。因为在我的例子中,查询具有 GROUP BY 条件,在这种情况下似乎非常困难。

这是为 Oracle 编写的一段代码,在转换为 Postgres 时遇到了困难。

SELECT
R_ID,
S_TYPE,
I_ID,
M_TYPE,
TRUNC(CAST( START_DATE, 'D') AS START_DATE,
SUM(VALUE) AS SUM_VALUE,
SUM(VALUE) KEEP (DENSE_RANK FIRST ORDER BY START_DATE DESC) AS LATEST_VALUE
FROM
TABLEX
WHERE
ACTIVE = 'Y'
GROUP BY
R_ID,
S_TYPE,
I_ID,
M_TYPE,
TRUNC( START_DATE, 'D')

最重要的是让 DENSE_RANK 用于 START_DATE 并使用 TRUNC(START_DATE, 'D') 完成 GROUP BY。

如果有人对此有任何见解,请告诉我。

提前致谢。

最佳答案

尝试:

SELECT
R_ID,
S_TYPE,
I_ID,
M_TYPE,
TRUNC(CAST( START_DATE, 'D') AS START_DATE,
SUM(VALUE) AS SUM_VALUE,
SUM(CASE START_DATE WHEN my_date THEN VALUE ELSE 0 END) AS LATEST_VALUE
FROM (
SELECT *,
max( START_DATE ) OVER (partition by R_ID,
S_TYPE,
I_ID,
M_TYPE,
TRUNC( START_DATE, 'D')
) As my_date
FROM TABLEX
WHERE
ACTIVE = 'Y'
) x
GROUP BY
R_ID,
S_TYPE,
I_ID,
M_TYPE,
TRUNC( START_DATE, 'D')

无论是 PostgreSQL 还是我所知道的任何其他 RDBMS 都不支持 Oracle 的 KEEP DENSE RANK 语法,您必须以某种方式模拟此功能,以上就是这样的模拟。

关于Oracle 到 Postgres SQL 语法转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47229257/

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