SQL запрос для итерации по таблице для расчета разницы во времени между 1-й и 2-й записью, которые имеют одинаковое значение в одном из своих полей? - PullRequest
1 голос
/ 11 ноября 2010

У меня есть таблица postgresql для хранения сообщений с онлайн-форума. Каждый пост принадлежит теме. Я хочу вычислить время, которое требуется посту, который запускает поток, чтобы получить свой первый ответ (иногда поток никогда не получает ответ, поэтому его необходимо принять во внимание)

Таблица записей имеет следующие поля:

post_id, post_timestamp, thread_id

Может быть один или несколько постов в идентификаторе темы. Этот запрос, например, возвращает первое и второе сообщение цепочки с идентификатором 1234:

select * from posts where thread_id = 1234 order by post_timestamp limit 2

Я хочу рассчитать разницу во времени между первым и вторым сообщением и сохранить ее в отдельной таблице с такими полями:

thread_id, seconds_between_1s_and_2nd

1 Ответ

1 голос
/ 11 ноября 2010
SELECT  (
        SELECT  post_timestamp
        FROM    posts
        WHERE   thread_id = t.id
        ORDER BY
                post_timestamp
        LIMIT 1 OFFSET 1
        ) - 
        (
        SELECT  post_timestamp
        FROM    posts
        WHERE   thread_id = t.id
        ORDER BY
                post_timestamp
        LIMIT 1 OFFSET 0
        )
FROM    threads t

, или, PostgreSQL 8.4+:

SELECT  (
        SELECT  post_timestamp - LAG(post_timestamp) OVER (ORDER BY post_timestamp)
        FROM    posts
        WHERE   thread_id = t.id
        ORDER BY
                post_timestamp
        LIMIT 1 OFFSET 1
        )
FROM    threads t

Чтобы выразить это в секундах, используйте EXTRACT(epoch FROM AGE(time1, time2))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...