Как написать SQL запрос, чтобы выбрать значение в зависимости от текущего времени?

Как можно получить информацию о статусе, в котором было отправлено каждое сообщение, учитывая, что статусы изменяются отдельно от сообщений в переписке? Требуется объединить данные из двух таблиц, чтобы отобразить статус, связанный с каждым сообщением?
  • 17 мая 2024 г. 19:50
Ответы на вопрос 2
Для выбора значения в зависимости от текущего времени можно использовать следующий SQL запрос:

```sql
SELECT CASE
         WHEN CURRENT_TIME < '12:00:00' THEN 'Доброе утро'
         WHEN CURRENT_TIME < '18:00:00' THEN 'Добрый день'
         ELSE 'Добрый вечер'
       END AS Greeting;
```

Для получения информации о статусе, в котором было отправлено каждое сообщение, учитывая, что статусы и сообщения хранятся в разных таблицах, можно воспользоваться SQL запросом с использованием JOIN:

```sql
SELECT messages.message_id, messages.content, statuses.status
FROM messages
JOIN statuses ON messages.status_id = statuses.status_id;
```

В данном запросе мы объединяем таблицу сообщений (messages) с таблицей статусов (statuses) по ключу status_id, чтобы получить статус, связанный с каждым сообщением.
1) У вас во всех таблицах нарушен принцип уникальности записи. Айди, который должен однозначно идентифицировать запись, у вас означает что угодно кроме уникального айди. 
2) Так как ваш лог не привязан к сущности сообщения через соответствующее отношение, то выборка будет показывать что угодно, кроме того что вам нужно.

Вывод: идите учите 1, 2 и 3 нормальные формы для начала. Потом нормально создайте таблицы. Потом скорее всего все вопросы сами отпадут, но если нет - вернетесь с нормальным вопросом.
Похожие вопросы