Этот вопрос является продолжением тех же усилий, что и мой первый код, который я упоминал в нескольких других недавних постах. Короче говоря, я работаю через пару ошибок компилятора для запроса ниже. Теперь я получаю сообщение об ошибке: «Подзапрос вернул более одного значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения» Но то, что я придумаю ниже, мне кажется «законным», исходя из моих нынешних способностей ... любая помощь будет отличной. Кстати, я либо получаю эту ошибку, либо Visual Studio 2010 закрывается, когда я пытаюсь запустить это ...
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