Срез на момент времени средствами sqlite

Есть вот такая база данных

import sqlite3

conn = sqlite3.connect('entrance.db')

cur = conn.cursor()

cur.execute("""CREATE TABLE IF NOT EXISTS staff(
  id INTEGER PRIMARY KEY,
  name TEXT);
""")

cur.execute("""CREATE TABLE IF NOT EXISTS buildings(
  id INTEGER PRIMARY KEY,
  name TEXT);
""")

cur.execute("""CREATE TABLE IF NOT EXISTS state(
  id INTEGER PRIMARY KEY,
  name TEXT);
""")

cur.execute("""CREATE TABLE IF NOT EXISTS currentstate(
  id INTEGER PRIMARY KEY,
  staff_id NUMERIC,  
  state_id NUMERIC,
  buildings_id NUMERIC,
  time timestamp);
""")

conn.commit()



q=("""INSERT INTO 'staff'
                     ('name') 
                     VALUES (?);""")

value=[("Иванов",), ("Петров",), ("Сидоров",), ("Леонов",), ("Андреев",)]
cur.executemany(q, value)

  
q=("""INSERT INTO 'buildings'
                     ('name') 
                     VALUES (?);""")

value=[("A",), ("B",), ("C",)]
cur.executemany(q, value)

q=("""INSERT INTO 'state'
                     ('name') 
                     VALUES (?);""")

value=[("Пришел",),("Ушел",),("Вышел",), ("Вернулся",)]
cur.executemany(q, value)

q=("""INSERT INTO 'currentstate'
                     ('staff_id', 'state_id', 'buildings_id', time) 
                     VALUES (?, ?, ?, ?);""")

value=[(1, 1, 1, "2020-10-20 09:15:46"
),
      (2, 1, 2, "2020-10-20 10:15:46"),
       (1, 3, 2, "2020-10-20 11:15:46"),
       (3, 1, 1, "2020-10-20 12:15:46")
      ]
cur.executemany(q, value)

conn.commit()

Написал вот такую базу данных. Хочу спросить, можно ли средствами sqlite получить временной срез, чтобы получить информацию, где находятся сотрудники на момент времени. Пока что идея только в том, чтобы сделать выборку за весь день до нужно момента (отсортировав данные предварительно по времени) в список, потом по каждому визитеру найти последний элемент в списке (либо первый в зависимости от сортировки), потом удалить все остальные записи по сотруднику, либо записать этот рекорд в новый финальный список.

Возможно, можно сделать выборку крайних значнений для каждого сотрудника в таблице "currentstate" методами sql? либо есть более адекватные способы решить данную задачу?


Ответы (0 шт):