У меня есть следующий запрос, который повторяет подзапрос select с различными вариантами выбора столбцов, надеюсь, я мог бы написать его более элегантным способом. Обратите внимание, что первый запрос на выборку повторяется дважды в коде, но с другими вариантами выбора столбцов.
SET @date1 = '2010-01-06';
SET @date2 = '2010-07-01';
SET @qdate = '2010-07-01';
SET @period = 'WEEK';
(SELECT S.date1,
S.date2,
S.period,
Q.market,
Q.ticker,
Q.close * EXP(S.ratio) AS scenario
FROM portfolio.scenario S , portfolio.quote Q
WHERE
S.date1 >= @date1 AND
S.date2 <= @date2 AND
Q.date = @qdate AND
S.series = @series AND
Q.market = S.market AND
Q.ticker = S.ticker)
UNION
(SELECT T2.date1,
T2.date2,
T2.period,
T1.market,
T1.ticker,
0 AS scenario
FROM
(SELECT DISTINCT
Q.market,
Q.ticker
FROM portfolio.scenario S , portfolio.quote Q
WHERE
S.date1 >= @date1 AND
S.date2 <= @date2 AND
Q.date = @qdate AND
S.series = @series AND
Q.market = S.market AND
Q.ticker = S.ticker) AS T1
JOIN
(SELECT DISTINCT S.date1, S.date2, S.period
FROM portfolio.scenario S
WHERE S.series = @series AND
S.date1 >= @date1 AND
S.date2 <= @date2) AS T2
WHERE (T2.date1,
T2.date2,
T2.period,
T1.market,
T1.ticker)
NOT IN
(SELECT S.date1,
S.date2,
S.period,
Q.market,
Q.ticker
FROM portfolio.scenario S , portfolio.quote Q
WHERE
S.date1 >= @date1 AND
S.date2 <= @date2 AND
Q.date = @qdate AND
S.series = @series AND
Q.market = S.market AND
Q.ticker = S.ticker))