Нужно получить последние данные для каждого Name без учета сегодняшних.
Например (сегодня, скажем, 07 янв 2018):
id Name myDate Val1 Val2
1 A 2018-01-07 10 15
2 A 2018-01-06 8 23
3 A 2018-01-05 6 11
4 B 2018-01-05 26 73
5 A 2018-01-03 1 44
6 B 2018-01-03 56 18
7 C 2018-01-02 66 88
...
Мне нужен результат:
2 A 2018-01-06 8 23
4 B 2018-01-05 26 73
7 C 2018-01-02 66 88
Запрос, включая сегодняшние данные, выглядит так:
select Name,myDate,Val1,Val2
from myTable
join (
select Name, max(myDate) as myDate
from myTable
group by Name
) lastvalues using(Name, myDate)
как исключить сегодняшние данные?
Сделав так - where myDate < CURDATE() group by Name - вы найдете максимальные даты, не включая сегодня. и ваш запрос должен работать верно. Запрос полностью
select Name,myDate,Val1,Val2
from myTable
join (
select Name, max(myDate) as myDate
from myTable
where myDate < CURDATE()
group by Name
) lastvalues using(Name, myDate)
demo
Если есть группировка, то достаточно будет WHERE myDate < :current_date. Где current_date = '2018-01-07'
Пример:
SELECT `Name`,`myDate`,`Val1`,`Val2`
FROM `myTable`
WHERE `myDate` < :current_date
GROUP BY `Name`
ORDER BY `myDate` DESC
Стоит учитывать, что при группировке MYSQL выполнить перебор всех подходящих записей. Т.е. все записи для A, B и т.п. И только потом сгруппирует - занесет в результат первый найденный.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей