PostgreSQL: как обрезать и группировать временные метки?
Я работаю с базой данных и использую следующий запрос:
SELECT
evt_block_time,
COUNT(*) filter (
WHERE
uniswap_version = 'v1'
) OVER (
ORDER BY
evt_block_time
) as v1_pairs,
COUNT(*) filter (
WHERE
uniswap_version = 'v2'
) OVER (
ORDER BY
evt_block_time
) as v2_pairs
FROM
(
SELECT
'v2' as uniswap_version,
evt_block_time
FROM
uniswap_v2."Factory_evt_PairCreated"
UNION ALL
SELECT
'v1' as uniswap_version,
evt_block_time
FROM
uniswap."Factory_evt_NewExchange"
ORDER BY
evt_block_time
) as creations
Я хотел бы сделать несколько вещей. Прежде всего, усеките временные метки evt_block_time по неделям, а затем сгруппируйте по неделям.
- ПРИМЕЧАНИЕ. Я пытался использовать date_trunc('week', evt_block_time) в каждом из моих операторов выбора, но это выдает ошибку. См. ниже:
SELECT
date_trunc('week', evt_block_time),
COUNT(*) filter (
WHERE
uniswap_version = 'v1'
) OVER (
ORDER BY
evt_block_time
) as v1_pairs,
COUNT(*) filter (
WHERE
uniswap_version = 'v2'
) OVER (
ORDER BY
evt_block_time
) as v2_pairs
FROM
(
SELECT
'v2' as uniswap_version,
date_trunc('week', evt_block_time)
FROM
uniswap_v2."Factory_evt_PairCreated"
UNION ALL
SELECT
'v1' as uniswap_version,
date_trunc('week', evt_block_time)
FROM
uniswap."Factory_evt_NewExchange"
ORDER BY
evt_block_time
) as creations
который возвращает:
Столбец "evt_block_time" не существует в строке 31, позиции 26.
Кроме того, хотя я думаю, что это не требуется, я хотел бы запрашивать данные только за последние 52 недели (1 год).
Очевидно, я новичок в этом SQL, но я стараюсь изо всех сил. Любая помощь будет оценена по достоинству!
1 ответ
Ваш подзапросcreations
не имеет столбца с псевдонимомevt_block_time
, следовательно, вы не можете использовать это имя столбца в основном запросе.