Ниже для BigQuery Standard SQL
#standardSQL
SELECT Date,
MAX(IF(Symbol = 'SPY', Close, NULL)) SPY,
MAX(IF(Symbol = 'CWGIX', Close, NULL)) CWGIX,
MAX(IF(Symbol = 'ABC', Close, NULL)) ABC,
MAX(IF(Symbol = 'XYZ', Close, NULL)) XYZ
FROM `project.dataset.table`
GROUP BY Date
В приведенном выше сценарии вам понадобится столько строк, сколько символов у вас есть - это 20 на то, что вы указали в своем вопросе
MAX(IF(Symbol = 'SymbolName', Close, NULL)) SymbolName,
Я заинтересован в обоих
Если вам нужны ТОЛЬКО даты, когда ВСЕ символы имеют значение Close - вы можете использовать ниже
#standardSQL
SELECT * FROM (
SELECT DATE,
MAX(IF(Symbol = 'SPY', Close, NULL)) SPY,
MAX(IF(Symbol = 'CWGIX', Close, NULL)) CWGIX,
MAX(IF(Symbol = 'PG', Close, NULL)) PG
FROM `project.dataset.table`
GROUP BY DATE) t
WHERE NOT TO_JSON_STRING(t) LIKE '%null%'
Вы можете проверить, поиграть с выше, используя пример данных из вашего вопроса, как в примере ниже
#standardSQL
WITH `project.dataset.table` AS (
SELECT DATE '2010-01-01' DATE, 20.10 Close, 'SPY' Symbol UNION ALL
SELECT '2010-01-02', 20.11, 'SPY' UNION ALL
SELECT '2010-01-02', 30.11, 'CWGIX' UNION ALL
SELECT '2010-01-02', 40.10, 'PG' UNION ALL
SELECT '2010-01-03', 32.10, 'CWGIX' UNION ALL
SELECT '2010-01-04', 41.10, 'PG' UNION ALL
SELECT '2010-01-04', 30.02, 'CWGIX'
)
SELECT * FROM (
SELECT DATE,
MAX(IF(Symbol = 'SPY', Close, NULL)) SPY,
MAX(IF(Symbol = 'CWGIX', Close, NULL)) CWGIX,
MAX(IF(Symbol = 'PG', Close, NULL)) PG
FROM `project.dataset.table`
GROUP BY DATE) t
WHERE NOT TO_JSON_STRING(t) LIKE '%null%'
с результатом
Row DATE SPY CWGIX PG
1 2010-01-02 20.11 30.11 40.1