PostgreSql выбрать запись с самой новой датой, и проверить есть ли такая запись в другой таблице
Я использую Python, и базу данных PostgresSql (asyncpg)
У меня есть 2 таблицы:
Таблица Users
<table>
<tr>
<td>user_id</td>
<td>name</td>
<td>photo_id</td>
<td>last_seen</td>
</tr>
<tr>
<td>3</td>
<td>борис</td>
<td>photo1</td>
<td>2021-12-17 16:25:48.5594</td>
</tr>
<tr>
<td>6</td>
<td>петя</td>
<td>photo2</td>
<td>2021-12-17 15:18:02.368025</td>
</tr>
<tr>
<td>7</td>
<td>вася</td>
<td>photo3</td>
<td>2021-12-17 15:18:02.368025</td>
</tr>
</table>
Таблица History
<table>
<tr>
<td>user_id</td>
<td>name</td>
<td>photo_id</td>
</tr>
<tr>
<td>3</td>
<td>борис</td>
<td><span style="color: rgb(59, 64, 69); font-family: -apple-system, blinkmacsystemfont, "segoe ui", "liberation sans", sans-serif; font-size: 13px;">photo1</span></td>
</tr>
<tr>
<td>3</td>
<td>борис</td>
<td><span style="color: rgb(59, 64, 69); font-family: -apple-system, blinkmacsystemfont, "segoe ui", "liberation sans", sans-serif; font-size: 13px;">photo2</span></td>
</tr>
<tr>
<td>7</td>
<td>вася</td>
<td><span style="color: rgb(59, 64, 69); font-family: -apple-system, blinkmacsystemfont, "segoe ui", "liberation sans", sans-serif; font-size: 13px;">photo3</span></td>
</tr>
</table>
Таблица Hisotry содержит в себе историю того, какие photo_id видел user
Моя задача состоит в том, что-бы из таблицы Users забрать photo_id с наиболее новой датой(last_seen),и проверить -> " Видел ли текущий юзер, photo_id с "наиболее новой датой" , это же я проверяю с помощью(таблицы History), Если юзер видел, тогда выбираем следующую наиболее новую дату. И так далее..
Пример ожидаемого результата: Как вы могли заметить наиболее новая дата, сейчас у юзера "Петя" . Допустим юзер "Борис" решил запросить "запись с самой новой датой". Но так как в таблице History "Борис" уже видел photo_id "Пети", то нужно взять следующую "наиболее новую запись" Следующая наиболее новая запись пренадлежит "Борису" , проверяем видел ли "Борис" photo_id "Бориса", и да, как пародоксально это бы не звучало, да видел. Тогда проверяем следующую наиболее новую запись, которая пренадлежит "Васи", проверка видел ли "Борис" photo_id Васи. -> Нет, не видел. Тогда на выходе "Борис" должен получить запись где name='Вася'
Мои попытки:
Вот-так я получаю запись с самой новой датой: sql = f"SELECT * FROM Users ORDER BY last_seen DESC LIMIT 1"
Так я проверяю, существует ли у записи с наиболее новой датой photo_id в History sql = f"SELECT EXISTS(SELECT id from history WHERE id={id} AND photo_id='{photo_id}')" - Вернет True , если есть. False - если нету.
А вот-так я беру "следующую запись с наиболее новой датой" sql = f"SELECT * FROM Users WHERE last_seen < '{newdate}' ORDER BY last_seen DESC LIMIT 1"
Где {newdate} - самая новая дата
Буду безумно благодарен любой помощи!