acc*_*yst 4 sql-server-2008-r2
我试图计算的内容有点难以描述,所以请耐心等待...
我有一张表,上面有产品编号,以及 4 年内每周每种产品的价格。价格可以在几周之间上涨或下跌。对于每个日期,我试图计算每个产品在那个时间点之前的最高价格。
在下面的示例表中,第三列(价格)是我拥有的数据;第四列(最大价格坑)是我试图计算的。- 编辑:需要明确的是,此列尚不存在!
例如,在 2012 年 15 月 1 日,产品 001 的最高价格为 50,尽管在接下来的一周它上升到 60(这是整个时期的最高价格)。
我想我可能需要使用某种循环,但我真的不知道从哪里开始。我对 SQL 的基础知识有很好的掌握,但是当它涉及到窗口函数和进一步时,我有点模糊。我在谷歌上搜索了很多问题,但找不到任何指针。
任何人都可以帮忙吗?如果您需要我澄清我的要求,请告诉我!
产品 | 日期 | 价格 | Max Price PIT(这一栏是我要计算的) 001 01/01/2012 25 25 001 08/01/2012 50 50 001 15/01/2012 35 50 001 22/01/2012 60 60 001 29/01/2012 50 60 001 05/02/2012 15 60 002 01/01/2012 18 18 002 08/01/2012 7 18 002 15/01/2012 10 18 002 22/01/2012 20 20 002 29/01/2012 30 30 002 05/02/2012 25 30
谢谢!
ps 表是 19391864 行。
如果您需要滚动最大值,则可以同时使用CROSS APPLY
或LEFT JOIN
,这是CROSS APPLY
版本
SELECT Product, Date, Price, b.[Max Price PIT]
FROM Table1 a
CROSS APPLY (SELECT MAX(Price) [Max Price PIT]
FROM Table1 b
WHERE a.Product = b.Product
AND a.Date >= b.Date) b
Run Code Online (Sandbox Code Playgroud)
使用 SQLServer 2012 或更高版本,可以使用 newROWS
子句获得相同的效果
SELECT Product, Date, Price
, MAX(Price) OVER (PARTITION BY Product ORDER BY [Date]
ROWS UNBOUNDED PRECEDING) [Max Price PIT]
FROM Table1
Run Code Online (Sandbox Code Playgroud)
关键是获取当前组之前的所有行并仅对它们应用统计函数,有时这种类型的表示称为“滚动”,例如滚动总和/总计,如果您获得现金的总价值,直到当前行。
归档时间: |
|
查看次数: |
3388 次 |
最近记录: |