Один из способов получить пропуски или «пропущенные» временные метки - использовать generate_series
для создания серии временных меток, разделенных 60000 мс, а затем присоединиться к вашей таблице.Вот так:
-- Simulate some data with a gap
WITH exchange(tstamp, val) AS
(
VALUES
(1551118800000, 0.03626),
(1551118860000, 0.036243),
(1551118980000, 0.03627)
)
-- Return timestamp(s) that do not match to exchange table data
SELECT stamps.tstamp AS missing_timestamp
FROM exchange
RIGHT JOIN generate_series(1551118800000, 1551118980000, 60000) stamps(tstamp)
ON exchange.tstamp = stamps.tstamp
WHERE exchange.tstamp IS NULL
-- Or using a more explicit anti-JOIN (cleaner?)
SELECT stamps.tstamp AS missing_timestamp
FROM generate_series(1551118800000, 1551118980000, 60000) stamps(tstamp)
WHERE NOT EXISTS (SELECT 1 FROM exchange WHERE tstamp = stamps.tstamp)
Первый аргумент в generate_series
- это минимальная отметка времени, а второй - максимум.Вы можете изменить для вашего случая использования.Последний аргумент - это «шаг» (60000 мс).
Результат (с учетом смоделированных данных выше):
missing_timestamp
------
1551118920000