Я новичок в postgres, поэтому, пожалуйста, успокойтесь.
Я пытаюсь написать запрос, чтобы для любого пользователя я мог извлечь ВСЕ файлы журналов (как их действия, так и действия других) за одну минуту до и одну минуту после того, как его имя появилось в журналах в пределах та же самая партия
chat.batchstamp is varchar
chat.datetime is timestamp
chat.msg is text
chat.action is text (this is the field with the username)
Вот отдельные команды, которые я хочу использовать, я просто не знаю, как их собрать, и действительно ли это правильный путь для этого.
SELECT batchstamp, datetime, msg FROM chat WHERE action LIKE 'username';
Ожидаемый выход:
batchstamp datetime msg
abc 2010-12-13 23:18:00 System logon
abc 2010-12-13 10:12:13 System logon
def 2010-12-14 11:12:18 System logon
SELECT * FROM chat WHERE datetime BETWEEN datetimefrompreviousquery - interval '1 minute' AND datetimefrompreviousquery + interval '1 minute';
Не могли бы вы помочь мне объяснить, что мне следует делать, чтобы передать данные из предыдущего запроса во второй запрос? Я посмотрел на подзапросы, но мне нужно запустить два подзапроса? Должен ли я построить временную таблицу?
После того, как все это сделано, как мне убедиться, что время совпадения запроса находится в пределах одной пакетной отметки?
Если вы можете указать мне правильное направление, это здорово. Если вы можете предоставить запрос, это даже лучше. Если мое объяснение не имеет смысла, возможно, я слишком долго на это смотрю.
Спасибо за ваше время.
На основе приведенного ниже кода Нейта С я использовал это:
SELECT * FROM chat,
( SELECT batchstamp, datetime FROM chat WHERE action = 'fakeuser' )
AS log WHERE chat.datetime BETWEEN log.datetime - interval '1 minute' AND log.datetime + '1 minute';
Кажется, он не возвращает каждое попадание в «fakeuser», и когда это происходит, он извлекает журналы из каждой «пакетной метки» вместо того, где был найден «fakeuser». Я для другого вложенного запроса? Как называется этот тип процедуры, чтобы я мог продолжить ее изучение?
Еще раз спасибо.