这个问题是继续努力编写我的第一个cte,我在其他一些最近的帖子中提到过。简而言之,我正在为下面的查询编写一些编译器错误。我现在收到错误“Subquery返回了多个值,当子查询跟随=,!=,<,< =,>,> =或当子查询用作表达式时,这是不允许的。但是根据我目前的能力,我认为下面的内容对我来说似乎是“合法的”......任何帮助都会很棒。顺便说一句,我不是得到这个错误,或Visual Studio 2010中关闭,当我尝试运行此...Sql Server cte错误“子查询返回了多个值。”
WITH Symb AS
(
SELECT Symbol
FROM tblSymbolsMain
),
DatesNotNeeded AS
(
SELECT Date
FROM tblDailyPricingAndVol inner join Symb on
tblDailyPricingAndVol.Symbol = Symb.Symbol
),
WideDateRange AS
(
SELECT TradingDate
FROM tblTradingDays
WHERE (TradingDate >= dbo.NextAvailableDataDownloadDateTime()) AND (TradingDate <= dbo.LatestAvailableDataDownloadDateTime())
),
DatesNeeded AS
(
SELECT TradingDate
FROM WideDateRange wdr
WHERE NOT EXISTS (SELECT * FROM DatesNotNeeded d where d.Date = wdr.TradingDate)
)
SELECT Symb.Symbol, DatesNeeded.TradingDate
FROM Symb CROSS JOIN DatesNeeded
我的功能,要求:
ALTER FUNCTION dbo.LatestAvailableDataDownloadDateTime()
RETURNS date
BEGIN
RETURN (SELECT DATEADD(hour, 18, MAX(TradingDate)) AS LatestTradingDateAvailForDL
FROM tblTradingDays
GROUP BY TradingDate
HAVING (DATEADD(hour, 18, MAX(TradingDate)) < GETDATE()))
END
ALTER FUNCTION dbo.NextAvailableDataDownloadDateTime()
RETURNS date
BEGIN
RETURN (SELECT DATEADD(hour, 18, MIN(TradingDate)) AS TrDate
FROM tblTradingDays
HAVING (DATEADD(hour, 18, MIN(TradingDate)) > dbo.LatestDataDownloadDate()))
END
您可以发布背后'NextAvailableDataDownloadDateTime'和'LatestAvailableDataDownloadDateTime'的代码? – Eric 2012-01-04 22:18:23
@Eric Yup,刚才.. – StatsViaCsh 2012-01-04 22:23:14
@StatsViaCash - 发现问题。你正在试图找到最大值的列。这将只返回'dateadd(hour,18,tradingdate)
Eric
2012-01-04 22:28:22