Представьте, что у вас есть таблица comments
в вашей базе данных.
Таблица комментариев имеет столбцы, id
, text
, show
, comment_id_no
.
Если пользователь вводит комментарий, он вставляет строку в базу данных.
| id | comment_id_no | text | show | inserted_at |
| -- | -------------- | ---- | ---- | ----------- |
| 1 | 1 | hi | true | 1/1/2000 |
Если пользователь хочет обновить этот комментарий, он вставляет новую строку в БД
| id | comment_id_no | text | show | inserted_at |
| -- | -------------- | ---- | ---- | ----------- |
| 1 | 1 | hi | true | 1/1/2000 |
| 2 | 1 | hey | true | 1/1/2001 |
Обратите внимание, что он сохраняет то же значение comment_id_no
. Это так, мы сможем увидеть историю комментария.
Теперь пользователь решает, что он больше не хочет отображать свой комментарий
| id | comment_id_no | text | show | inserted_at |
| -- | -------------- | ---- | ----- | ----------- |
| 1 | 1 | hi | true | 1/1/2000 |
| 2 | 1 | hey | true | 1/1/2001 |
| 3 | 1 | hey | false | 1/1/2002 |
Это скрывает комментарий от конечных пользователей.
Теперь второй комментарий сделан (не обновление первого)
| id | comment_id_no | text | show | inserted_at |
| -- | -------------- | ---- | ----- | ----------- |
| 1 | 1 | hi | true | 1/1/2000 |
| 2 | 1 | hey | true | 1/1/2001 |
| 3 | 1 | hey | false | 1/1/2002 |
| 4 | 2 | new | true | 1/1/2003 |
То, что я хотел бы сделать, это выбрать все последние версии уникального commend_id_no
, где show
равно true. Однако я не хочу, чтобы запрос возвращал id=2
.
Шаги, которые необходимо выполнить для запроса...
- выберите все самые последние, отдельные
comment_id_no
. (должен вернутьid=3
иid=4
) - выберите где show = true (должен возвращать только
id=4
)
Примечание: я на самом деле пишу этот запрос в эликсире с использованием ecto и хотел бы иметь возможность сделать это без использования функции подзапроса. Если кто-то может ответить на это в SQL я могу преобразовать ответ сам. Если кто-нибудь знает, как ответить на этот вопрос в эликсире, то не стесняйтесь ответить.