发布我的第一个问题。如有任何发帖错误,请原谅。我非常感谢能够从一处解决我的问题的答案。
我有一张名为“定价”的表。下面是ddl。
CREATE TABLE PRICING (ITEM VARCHAR2(80) NOT NULL,
LOCATION NUMBER(10) NOT NULL,
PRICE_DATE DATE NOT NULL,
PRICE_TYPE VARCHAR2(2) NOT NULL,
RETAIL_VALUE NUMBER(20,4),
LAST_RETAIL NUMBER(20,4) );
该表有以下几条记录。
Insert into PRICING values ('30888273',77,to_date('20-SEP-20','DD-MON-RR'),'0',2,NULL);
Insert into PRICING values ('30888273',77,to_date('03-MAR-23','DD-MON-RR'),'8',1.4,NULL);
Insert into PRICING values ('30888273',77,to_date('06-MAR-23','DD-MON-RR'),'4',3,NULL);
Insert into PRICING values ('30888273',77,to_date('04-APR-23','DD-MON-RR'),'8',1.4,NULL);
Insert into PRICING values ('30888273',77,to_date('10-APR-23','DD-MON-RR'),'4',4,NULL);
Insert into PRICING values ('30888273',77,to_date('02-MAY-23','DD-MON-RR'),'8',1.4,NULL);
Insert into PRICING values ('30888273',77,to_date('08-MAY-23','DD-MON-RR'),'4',5,NULL);
Insert into PRICING values ('30888273',77,to_date('30-MAY-23','DD-MON-RR'),'8',1.4,NULL);
Insert into PRICING values ('30888273',77,to_date('05-JUN-23','DD-MON-RR'),'4',6,NULL);
Insert into PRICING values ('30888273',77,to_date('04-JUL-23','DD-MON-RR'),'8',1.4,NULL);
Insert into PRICING values ('30888273',77,to_date('05-JUL-23','DD-MON-RR'),'4',7,NULL);
commit;
使用此查询检查表中的数据。
select * from PRICING order by price_date;
即对于price_type为8的每条记录,last_retail列从retail_value列的上一个(按日期)和最新值获取其值,其中price_type为0或4。最好是一个Update语句来解决这个问题。
感谢您提前查看并回答。
问候, 蔡
无需更新您的表格,您可以在查询中使用
LAG
分析函数获得此结果:
SELECT item
,location
,price_date
,price_type
,retail_value
,CASE
WHEN price_type = 8 THEN
LAG(retail_value
,1
,0)
OVER(
ORDER BY price_date
)
ELSE
NULL
END AS last_retail
FROM pricing;
ITEM LOCATION PRICE_DATE PR RETAIL_VALUE LAST_RETAIL
---------- ---------- ----------- -- ------------ -----------
30888273 77 20-SEP-2020 0 2
30888273 77 03-MAR-2023 8 1.4 2
30888273 77 06-MAR-2023 4 3
30888273 77 04-APR-2023 8 1.4 3
30888273 77 10-APR-2023 4 4
30888273 77 02-MAY-2023 8 1.4 4
30888273 77 08-MAY-2023 4 5
30888273 77 30-MAY-2023 8 1.4 5
30888273 77 05-JUN-2023 4 6
30888273 77 04-JUL-2023 8 1.4 6
30888273 77 05-JUL-2023 4 7