不同日期的商品找出售價的差異

阿龍
我有一個資料表,紀錄了每天商品的價格,全部商品有好幾百個
我想要找出今天售價大於昨天售價10%的產品,
也就是說昨天若是賣100元,今天賣111元就篩選出來
請問要怎麼寫,資料表格示如下
日期 商品名稱 售價
20210101 AA 100
20210101 BB 10
20210101 CC 20
20210102 AA 111
20210102 BB 9
20210102 CC 21
.....

真的有點難
alter procedure up_cnt
as

create table #rep
(
日期 datetime,
商品名稱 nvarchar(50),
售價 int)

insert #rep
select '2021/01/01','AA',100

insert #rep
select '2021/01/01','BB',10

insert #rep
select '2021/01/01','CC',20

insert #rep
select '2021/01/02','AA',111

insert #rep
select '2021/01/02','BB',9

insert #rep
select '2021/01/02','CC',21

select 商品名稱 from #rep t1
where (售價-(select 售價 from #rep where 商品名稱=t1.商品名稱 and 日期='2021/01/01'))>10
and 日期='2021/01/02'
真的有點難
是比率 我更正一下
alter procedure up_cnt
as

create table #rep
(
日期 datetime,
商品名稱 nvarchar(50),
售價 int)

insert #rep
select '2021/01/01','AA',100

insert #rep
select '2021/01/01','BB',10

insert #rep
select '2021/01/01','CC',20

insert #rep
select '2021/01/02','AA',111

insert #rep
select '2021/01/02','BB',12

insert #rep
select '2021/01/02','CC',21


select t1.商品名稱,t1.售價,(select 售價 from #rep where 日期='2021/01/01' and 商品名稱=t1.商品名稱) 昨日售價
into #xx
from #Rep t1 where 日期='2021/01/02'

alter table #xx alter column 昨日售價 numeric(18,2) null

select * ,(售價-昨日售價)/昨日售價 比率 from #xx where (售價-昨日售價)/昨日售價>0.1

最有價值解答

pilipala
用視窗函數 LEAD 的做法,參考看看

DECLARE @Temp TABLE (
	[日期] date , 
	[商品名稱] char(2) , 
	[售價] money)

INSERT INTO @Temp ([日期] , [商品名稱] , [售價]) VALUES
	('20210101' , 'AA' , 100),
	('20210101' , 'BB' , 10),
	('20210101' , 'CC' , 20),
	('20210102' , 'AA' , 111),
	('20210102' , 'BB' , 9),
	('20210102' , 'CC' , 21)

SELECT
	T.* ,
	[隔日售價] - [售價] ,
	(([隔日售價] - [售價]) / NULLIF([售價] , 0))
FROM
	(
		SELECT 
			* ,
			LEAD([售價], 1, NULL) OVER (PARTITION BY [商品名稱] ORDER BY [日期]) AS [隔日售價]
		FROM @Temp
	) AS T
WHERE (([隔日售價] - [售價]) / NULLIF([售價] , 0)) > 0.1

阿龍
感謝兩位大大的協助,
最後我用LEAD的方法做出來了,
這函數以前沒用過,
上網找了一下,也有類似的作法,
提供給未來有需要的人參考,
謝謝。
https://docs.microsoft.com/zh-tw/sql/t-sql/functions/lead-transact-sql?view=sql-server-ver15
回到頂部