Использование даты и времени bigint для выбора записей старше X дней - PullRequest
0 голосов
/ 06 декабря 2011

В моей таблице хранятся даты в виде bigint, и я пытаюсь выбрать записи старше 30 дней. Я видел массу вопросов по SO и Google, связанных с этим вопросом, но я не могу найти то, что мне нужно.

Вот что у меня есть, что кажется очень неэффективным:

SELECT
  COUNT(*) 
FROM 
  alert
WHERE 
  ('1969-12-31 19:00:00 GMT'::timestamp + (alert.mytstamp::text)::interval) < (localtimestamp - INTERVAL '30 days')

Насколько я понимаю, это преобразование поля bigint mytstamp в метку времени, чтобы сравнить его с меткой времени "30 дней назад". Он делает это для каждой записи в таблице :(. Кажется, более эффективно преобразовать текущую метку времени - 30 дней в один раз в bigint, а затем сравнить это со всеми моими датами bigint.

У меня слабые навыки SQL, так что будь проще :). Спасибо за помощь.

1 Ответ

1 голос
/ 06 декабря 2011

Еще раз я нашел решение сразу после публикации в SO. Я думаю, это талисман удачи. В любом случае, это то, что я ищу, и гораздо более эффективно:

SELECT
  COUNT(*) 
FROM 
  alert
WHERE 
  alert.timestamp < extract('epoch' from (CURRENT_TIMESTAMP  - INTERVAL '10 days'))::bigint

Мне интересно, выполняет ли postgres вычисление для extract('epoch' from (CURRENT_TIMESTAMP - INTERVAL '10 days'))::bigint один раз или для каждого сравнения записей.

...