Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按顺序划分时第一个_值出错_Sql_Oracle - Fatal编程技术网

Sql 按顺序划分时第一个_值出错

Sql 按顺序划分时第一个_值出错,sql,oracle,Sql,Oracle,我是SQL新手,希望从列表中创建一个名为“firstprice”和“lastprice”的列。按零件号划分的首个价格,按提取的注册年份(零件价格)订购。我的代码似乎忽略了按代码排序,因为我只得到物品的第一个价值(价格)。(不按年份排序) 选择 价格。“部分”, 价格。“价格”, 价格,“雷格特” 强制转换(第一个值(“价格”忽略空值) OVER(按PB划分。“部分”订单按(从(Prices.“RegDt”))中提取(年份)作为整数)作为“FirstPrice”, 强制转换(最后一个值(“价格”忽

我是SQL新手,希望从列表中创建一个名为“firstprice”和“lastprice”的列。按零件号划分的首个价格,按提取的注册年份(零件价格)订购。我的代码似乎忽略了按代码排序,因为我只得到物品的第一个价值(价格)。(不按年份排序)

选择
价格。“部分”,
价格。“价格”,
价格,“雷格特”
强制转换(第一个值(“价格”忽略空值)
OVER(按PB划分。“部分”订单按(从(Prices.“RegDt”))中提取(年份)作为整数)作为“FirstPrice”,
强制转换(最后一个值(“价格”忽略空值)
OVER(按PB划分。“部分”订单按(从(Prices.“RegDt”))中提取(年份)作为整数)作为“FirstPrice”,
从价格
预期产量是当年登记的第一个价格,但我只得到该项目的第一个价格(不显示每年)

预计产量是当年登记的第一个价格

所以您需要在
分区
子句中添加年份。我还为
last\u value
定义了window子句,否则它是无界的前一行和当前行,我们需要下一行的数据:

select part, price, regdt, 
       first_value(price) over (partition by part, extract (year from(regdt))
                                order by regdt) fp,
       last_value(price) over (partition by part, extract (year from(regdt))
                               order by regdt 
                               range between current row 
                                         and interval '1' year following ) lp
  from prices

请提供样本数据和预期结果。你应该从第一年得到一个价格,但是如果那一年有不止一个价格,那么你得到的价格是不确定的。您没有按年份进行选择/分组,因此您没有要求“每年”值。不清楚这是否是你想要的。(不相关,但如果您有选择的话,我建议您避免使用引用的标识符,因为它们会在某些时候给您带来痛苦…)谢谢您的输入。我已经改变了我的代码如下,它工作得很好,谢谢!