我请求添加新列,该列将计算记录中从 1 月到该月的名为 kode_buatan 的不同列(因此,如果记录的日期为 2024 年 3 月,则计算从 2024 年 1 月到 2024 年 3 月的不同 kode buatan),所以我进行了此查询
WITH coba1 AS (
SELECT * FROM table_A
)
SELECT coba1.*,
(SELECT COUNT(DISTINCT kode_buatan)
FROM table_A sd
WHERE EXTRACT(MONTH FROM sd.date) <= EXTRACT(MONTH FROM coba1.date)
AND EXTRACT(YEAR FROM sd.date) <= EXTRACT(YEAR FROM coba1.date)
AND sd.shipto = coba1.shipto) AS calculated_column_name
FROM coba1;
然后存在数据重复的问题,所以我添加了不同的数据,这使得执行时间变得很长(未完成)。有人可以给我一些提高查询性能的建议吗?谢谢你
我已经尝试过了
WITH coba1 AS (
SELECT * FROM table_A
)
SELECT coba1.*,
(SELECT COUNT(DISTINCT kode_buatan)
FROM table_A sd
WHERE EXTRACT(MONTH FROM sd.date) <= EXTRACT(MONTH FROM coba1.date)
AND EXTRACT(YEAR FROM sd.date) <= EXTRACT(YEAR FROM coba1.date)
AND sd.shipto = coba1.shipto) AS calculated_column_name
FROM
和
create table coba2 as (
select extract(year from date) as TAHUN, extract(month from date) as BULAN, shipto, (select count(distinct kode_buatan) from salesout_doi sd where extract(month from sd.date) <= extract(month from coba1.date) and extract(year from sd.date) = extract(year from coba1.date) and sd.shipto = coba1.shipto ) from salesout_doi_cobaaaytd coba1 where extract(year from date) = 2024
)
select distinct * from coba2
你不需要所有这些东西,我认为你的查询是错误的......
尝试:
SELECT coba1.*, COUNT(DISTINCT kode_buatan) AS calculated_column_name
FROM table_A AS sd JOIN table_A AS coba1
ON sd.shipto = coba1.shipto
AND (EXTRACT(YEAR FROM sd.date) <= EXTRACT(YEAR FROM coba1.date)
OR (EXTRACT(YEAR FROM sd.date) <= EXTRACT(YEAR FROM coba1.date)
AND EXTRACT(MONTH FROM sd.date) <= EXTRACT(MONTH FROM coba1.date) )
GROUP BY coba1.*
将“coba1.*”替换为列名称的精确枚举...
获得更高性能的一种方法是在表中添加一个计算列,其中包含年份和月份的串联,格式为:YYYYMM
首先检查kode_buatan列是否有索引。 如果没有索引,您应该为该列创建一个新索引。
还建议使用显示执行计划来更好地优化您的查询。