Найдите строку с сегодняшней действительной ценой в зависимости от даты validFrom в mySQL
Вот и все. У меня есть следующие данные:
type, validfrom, price
1, 2018-01-15, 10
1, 2018-01-20, 20
1, 2018-01-25, 30
2, 2018-01-01, 12
3, 2018-01-01, 18
Сегодня 2018-01-21, мне нужен запрос, который дает следующий результат:
1, 2018-01-20, 20
2, 2018-01-01, 12
3, 2018-01-01, 18
Я пробовал разные комбинации с использованием подвыборов и групп, но мне не удалось найти хороший, короткий запрос, решающий эту проблему (и это тоже работает).
Есть идеи?
2 ответа
Решение
В MySQL вы можете сделать:
select t.*
from t
where t.validfrom = (select max(t2.validfrom)
from t t2
where t2.type = t.type and
t2.validfrom < now()
);
С индексом на t(type, validfrom)
это должно иметь очень хорошую производительность.
SELECT p.*
FROM prices p
LEFT JOIN prices p_
ON p.type = p_.type
AND p.validfrom < p_.validfrom
AND p_.validfrom< NOW()
WHERE p_.type IS NULL
AND p.validfrom<=NOW()