Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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_Sql Server 2005 - Fatal编程技术网

余额上的卷的SQL函数(财务查询)

余额上的卷的SQL函数(财务查询),sql,sql-server-2005,Sql,Sql Server 2005,我想为平衡卷SQL函数创建一个函数。 这是一个太复杂的计算,met无法计算出来,但下面是用户定义表函数的概要。如果有人能帮我填空,我将不胜感激。 克雷格 下面是一个数据示例 ticker date close volume pzi: 5-10-10 10.94 805 pzi; 5-11-10 11.06 444 pzi: 5-12-10 11.42 236 pzi: 5-13-10 11.3 635 p

我想为平衡卷SQL函数创建一个函数。 这是一个太复杂的计算,met无法计算出来,但下面是用户定义表函数的概要。如果有人能帮我填空,我将不胜感激。 克雷格

下面是一个数据示例

   ticker  date  close  volume 
   pzi:  5-10-10  10.94    805 
   pzi;  5-11-10  11.06    444 
   pzi:  5-12-10  11.42    236 
   pzi:  5-13-10  11.3    635 
   pzi:  5-14-10  11    316 

   date  obv 
   5-10  996.38 
   5-11  996.82 
   5-12  997.06 
   5-13  996.42 
   5-14  996.11 

下面是一个对优化器最有效的内联表值函数:

CREATE FUNCTION [dbo].[GetStdDev3] (@TKR VARCHAR(10))
    RETURNS TABLE
    AS RETURN (
    WITH    Y AS ( SELECT   *
                   ,OBV_Change = ISNULL(SIGN(currclose - prevclose)
                                        * volume, 1000)
           FROM     ( SELECT    curr.date
                               ,curr.[CLOSE] AS currclose
                               ,prev.[CLOSE] AS prevclose
                               ,curr.volume
                      FROM      Tickers AS curr
                      LEFT JOIN Tickers AS prev
                                ON prev.ticker = @TKR
                                   AND prev.date = ( SELECT MAX(date)
                                                     FROM   Tickers
                                                     WHERE  ticker = @TKR
                                                            AND date < curr.date
                                                   )
                      WHERE     curr.ticker = @TKR
                    ) AS X
         )
SELECT  y1.date
       ,SUM(y2.OBV_Change) AS OBV
       ,ROW_NUMBER() OVER(ORDER BY y1.date) AS dayno
FROM    Y AS y1
LEFT JOIN Y AS y2
        ON y2.date <= y1.date
GROUP BY y1.date
)

我不确定规范化-我忽略了这一点-将其添加到多语句TVF中可能需要您将其添加到多语句TVF中。

我没有看到句点列,句点是否按日期顺序排列?您能给我们一些示例数据和示例输出来说明每个场景吗?另外,您使用的是什么数据库产品和版本?周期只是日期。。。查询的所有日期或可用数据的所有日期。我正在使用SQL2005。OBV使用以下股票代码表和输出数据的示例如下……股票代码日期关闭卷pzi:5-10-10 10.94 805 pzi;5-11-10 11.06 444 pzi:5-12-10 11.42 236 pzi:5-13-10 11.3 635 pzi:5-14-10 11 316日期obv 5-10 996.38 5-11 996.82 5-12 997.06 5-13 996.42 5-14 996.11股票日期结束卷\pzi 5-10-10 10.94 805 pzi5-11-10 11.06 444 pzi 5-12-10 11.42 236 pzi 5-13-10 11.3 635 pzi 5-14-10 11 316日期obv 5-10 996.38 5-11 996.82 5-12 997.06 5-13 996.42 5-14 996.11Cade,当我试着运行它时,它给了我一个关于ORDERBY子句的错误——说它无效,除非你使用TOP等等。有什么建议吗?另外,我不知道你所说的正常化是什么意思。。。干得好!我还没有完全弄明白逻辑是怎么回事,但如果你能帮我澄清一些问题,我会设法弄明白的!Create函数应该说dbo.OBV not GetStdDevI取出了底部的ORDERBY子句。。。不确定这是不是正确的数据。。。我想你是在乘以接近值的差值,我们只需要加上或减去体积,我们可以先乘以0.0001吗?。我最初说的是.001,但最好使用0001。@CraigJSte抱歉,我在测试代码后将其插入函数中-您需要在dayno之前从udf ORDER中进行选择。我只是用差值的符号乘以体积。如果规范化是按行进行的,而不是按集进行的,那么是的,您可以在每行上除以1000。我认为这将起作用。。。我刚刚在OBV_Change表达式中添加了volume/1000
   ticker  date  close  volume 
   pzi:  5-10-10  10.94    805 
   pzi;  5-11-10  11.06    444 
   pzi:  5-12-10  11.42    236 
   pzi:  5-13-10  11.3    635 
   pzi:  5-14-10  11    316 

   date  obv 
   5-10  996.38 
   5-11  996.82 
   5-12  997.06 
   5-13  996.42 
   5-14  996.11 
CREATE FUNCTION [dbo].[GetStdDev3] (@TKR VARCHAR(10))
    RETURNS TABLE
    AS RETURN (
    WITH    Y AS ( SELECT   *
                   ,OBV_Change = ISNULL(SIGN(currclose - prevclose)
                                        * volume, 1000)
           FROM     ( SELECT    curr.date
                               ,curr.[CLOSE] AS currclose
                               ,prev.[CLOSE] AS prevclose
                               ,curr.volume
                      FROM      Tickers AS curr
                      LEFT JOIN Tickers AS prev
                                ON prev.ticker = @TKR
                                   AND prev.date = ( SELECT MAX(date)
                                                     FROM   Tickers
                                                     WHERE  ticker = @TKR
                                                            AND date < curr.date
                                                   )
                      WHERE     curr.ticker = @TKR
                    ) AS X
         )
SELECT  y1.date
       ,SUM(y2.OBV_Change) AS OBV
       ,ROW_NUMBER() OVER(ORDER BY y1.date) AS dayno
FROM    Y AS y1
LEFT JOIN Y AS y2
        ON y2.date <= y1.date
GROUP BY y1.date
)