Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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_Sum - Fatal编程技术网

在SQL中计算表子集的总和/平均值

在SQL中计算表子集的总和/平均值,sql,sql-server,sum,Sql,Sql Server,Sum,我正在寻找一些SQL方面的专业知识。我正在计算一个平均值,首先将所有相关行汇总,然后除以查询中的天数 我无法使总和正常工作(所有行的总和都为0)。有什么建议吗?谢谢 你为什么要把日期转换成数字?SQL Server具有非常好的日期函数和运算符。你应该使用它们 然而,我认为你的问题是之间的。假设[Date 250天前]早于[Date],则您的边界顺序错误。介于之间的的第一个界限需要小于第二个界限 因此,请尝试: SELECT [Ticker], [Date], [Date 250 Days Ag

我正在寻找一些SQL方面的专业知识。我正在计算一个平均值,首先将所有相关行汇总,然后除以查询中的天数

我无法使总和正常工作(所有行的总和都为0)。有什么建议吗?谢谢



你为什么要把日期转换成数字?SQL Server具有非常好的日期函数和运算符。你应该使用它们

然而,我认为你的问题是之间的
。假设
[Date 250天前]
早于
[Date]
,则您的边界顺序错误。介于
之间的
的第一个界限需要小于第二个界限

因此,请尝试:

SELECT [Ticker], [Date], [Date 250 Days Ago], [Close],
       SUM(CASE WHEN [Date] between [Date 250 Days Ago] AND [Date] 
                THEN [Close] ELSE 0 END) as [Aggregated 250 Day Closing Prices]
FROM [FinData].[dbo].[intradayOHLC_Selected_Closing_Prices_Staging]
GROUP BY [Ticker], [Date], [Date 250 Days Ago], [Close];
鉴于此,我认为您只希望
[Ticker]
组中。所以我猜你真的想要:

SELECT [Ticker],
       SUM(CASE WHEN [Date] between [Date 250 Days Ago] AND [Date] 
                THEN [Close] ELSE 0 END) as [Aggregated 250 Day Closing Prices]
FROM [FinData].[dbo].[intradayOHLC_Selected_Closing_Prices_Staging]
GROUP BY [Ticker]

非常感谢,戈登。我按照您的建议清理了代码,但是我的总和现在正在聚合世界中的所有日期,而不是我试图在Staging表中引用的指定日期范围

明确地说,我正在寻找每日滚动的1年平均值,所以我的最终输出需要包括股票代码和日期,以便我每天得到1行,每个股票代码(如果有意义的话)。你能给我指的任何方向都会很棒! 谢谢


你为什么要把日期转换成浮动呢?嘿,老兄,在故障排除方面,这是在浪费时间。当用作字符串时,似乎没有什么区别。thanksNOTE:不能在较小值之前使用较大值的between。e、 g.任何东西都不会在5和1之间,有些东西可能在1和5之间。
SELECT [Ticker],
       SUM(CASE WHEN [Date] between [Date 250 Days Ago] AND [Date] 
                THEN [Close] ELSE 0 END) as [Aggregated 250 Day Closing Prices]
FROM [FinData].[dbo].[intradayOHLC_Selected_Closing_Prices_Staging]
GROUP BY [Ticker]
CREATE TABLE [dbo].[intradayOHLC_Selected_Closing_Prices_Staging] (
[Ticker] varchar(50),
[Date] datetime,
[Date 250 Days Ago] datetime,
[Close] float
)

INSERT INTO [intradayOHLC_Selected_Closing_Prices_Staging] ([Ticker], [Date])
SELECT [Ticker], [DataDate]
FROM [FinData].[dbo].[Date_Ticker_Shell$]
WHERE [Date_Ticker_Shell$].[DataDate] between '01/2/2007' AND '10/26/2015'

UPDATE [intradayOHLC_Selected_Closing_Prices_Staging]
SET [Date 250 Days Ago]=[Date Calculations].[Date 250 Days Ago]
FROM [Date Calculations]
WHERE [intradayOHLC_Selected_Closing_Prices_Staging].[Date]=[Date Calculations].[Date]

UPDATE [intradayOHLC_Selected_Closing_Prices_Staging]
SET [Close]=[dailyOHLC].[Close]
FROM [dailyOHLC]
WHERE [intradayOHLC_Selected_Closing_Prices_Staging].[Date]=[dailyOHLC].[Date] And [intradayOHLC_Selected_Closing_Prices_Staging].[Ticker]=[dailyOHLC].[Ticker]


CREATE TABLE [dbo].[intradayOHLC_Selected_Closing_Prices] (
[Ticker] varchar(50),
[Date] datetime,
[Date 250 Days Ago] datetime,
[Close] float,
[Aggregated 250 Day Closing Prices] float,
[Average 250 Day Price] float
)

INSERT INTO [intradayOHLC_Selected_Closing_Prices] ([Ticker],[Aggregated 250 Day Closing Prices])
SELECT [Ticker],
SUM(CASE WHEN [Date] between [Date 250 Days Ago] AND [Date] 
THEN [Close] ELSE 0 END) as [Aggregated 250 Day Closing Prices]
FROM [FinData].[dbo].[intradayOHLC_Selected_Closing_Prices_Staging]
GROUP BY [Ticker]