Ваше предложение JOIN должно быть перед предложением GROUP BY.Кроме того, я знаю, что sqlite имеет несколько различных «необязательных» синтаксисов для объединений, но должен работать следующий более стандартный запрос:
SELECT a.date, a.symbol, SUM(a.oi * a.contract_settle) AS oi_dollar
FROM (SELECT date, symbol, oi, contract_settle
FROM ann
UNION
SELECT date, symbol, oi, contract_settle
FROM qtr) a
INNER JOIN crsp c ON a.date = c.date AND a.symbol = c.symbol
WHERE a.oi * a.contract_settle > 0
GROUP BY a.date, a.symbol
Если вы немного больше знаете о столбцах oi и contract_settle (например,они никогда не могут быть отрицательными), предложение WHERE a.oi <> 0 AND a.contract_settle <> 0
может иметь лучшую производительность.