Задать вопрос

Какой запрос оптимальнее?

На одном из собеседований дали тестовое задание:

Имеется таблица вида

+----+--------+------------+-------+
| id | type | date | value |
+----+--------+------------+-------+
| 1 | photo | 2015-02-02 | 1240 |
+----+--------+------------+-------+
| 2 | image | 2015-02-02 | 5609 |
+----+--------+------------+-------+
...
+----+--------+------------+-------+
| 50 | photo | 2015-02-01 | 1190 |
+----+--------+------------+-------+
| 51 | review | 2015-02-02 | 3600 |
+----+--------+------------+-------+
В таблице содержатся данные со значениями некоторых сущностей в разные даты. Набор сущностей ограничен. Данные в таблице обновляются каждый день, но может случиться так, что в какой-то из дней нет данных по некоторым сущностям. Необходимо написать запрос, который получит самые "свежие" значения по каждой сущности. Если за текущий день значения по какой-то из сущностей отсутствует, то необходимо выбрать предыдущее значение, и т.д. В результате должна получиться таблица вида:

+--------+------+
| photo | 1240 |
+--------+------+
| image | 5609 |
+--------+------+
| review | 3600 |
+--------+------+

Предложил такой запрос:

SELECT d1.type, d1.value
FROM data d1
JOIN (SELECT type, MAX(date) date
FROM data
GROUP BY type) d2
ON d1.type = d2.type AND d1.date = d2.date

Сказали, что это не оптимальное решение.
Они правы? Есть ли какое-то более оптимальное решение?
  • Вопрос задан
  • 203 просмотра
Подписаться 3 Оценить Комментировать
Решения вопроса 1
mahoho
@mahoho
Full stack certified PHP developer.
select
	type, value
from data as d1
where date = (select max(date) from data as d2 where d2.type = d1.type);

Вот более оптимальный запрос.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
evnuh
@evnuh
Поиск Гугл помог мне, впусти и ты его в свой дом
шутка от меня: самый оптимальный запрос всегда тот, который начинается с EXPLAIN.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы