Python PostgreSQL Query / Dataframe для разных последовательностей дат, хитрый - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь построить запрос Python Postgresql из моих данных, где я могу иметь общее среднее время онлайн-сессий (учитывая следующее):

Полные сессии состоят из 3 последовательных 1Часовые слоты.Сеансы могут длиться 1, 2 или 3 часа, в зависимости от того, имеют ли они 0, 1 или 2 последовательных слота.

Мой сценарий выглядит так в данный момент (я пробовал другие подходы через Панды, но я должен оставить его длявызов postgres)

import psycopg2


conn = psycopg2.connect(
        dbname='test_svr',
        host='127.0.0.1',
        port='5432',
        user='admin',
        password='admin',
    )
conn.autocommit = True
cursor = conn.cursor()


cursor.execute('''
SELECT pc_id, timestamp_id FROM session_and_slots
GROUP BY pc_id, timestamp_id
ORDER BY pc_id, timestamp_id
''')



print("|   PC   | | Timestamp  |")
print('\n'.join(', '.join(map(str, x)) for x in cursor.fetchall()))

Моя база данных:

|  PC  | |   Timestamp |
1, 2018-03-15 11:00:00
1, 2018-03-15 12:00:00
1, 2018-03-15 13:00:00
1, 2018-03-15 14:00:00
1, 2018-03-15 15:00:00
2, 2018-03-15 01:00:00
2, 2018-03-15 02:00:00
2, 2018-03-15 03:00:00
2, 2018-03-15 04:00:00
2, 2018-03-15 08:00:00
2, 2018-03-15 09:00:00
2, 2018-03-15 10:00:00
2, 2018-03-15 11:00:00
2, 2018-03-15 12:00:00
3, 2018-03-15 10:00:00
3, 2018-03-15 11:00:00
3, 2018-03-15 12:00:00
3, 2018-03-15 13:00:00
3, 2018-03-15 18:00:00
4, 2018-03-15 13:00:00
4, 2018-03-15 14:00:00
5, 2018-03-15 13:00:00

Мои ожидаемые результаты должны быть следующими:

3hr sesh:4
2hr sesh:3
1hr sesh:4

AVG time for sesh: 1,5 hrs

У меня естьтрудности работы с интервалами времени для оценки 1-часовой разности последовательностей.Любые мысли, чтобы адаптировать мой запрос и / или создание новой таблицы?

Xoxo

...