У меня есть следующая таблица:
date1 date2 sc cash date
"2010-09-20" "2010-09-21" 202 300 "2010-03-01"
"2010-09-20" "2010-09-21" 202 600 "2010-08-01"
"2010-09-20" "2010-09-21" 202 670 "2010-08-20"
"2010-09-20" "2010-09-21" 202 710 "2010-09-01"
"2010-09-20" "2010-09-21" 202 870 "2010-09-21"
"2010-09-21" "2010-09-22" 199 300 "2010-03-01"
"2010-09-21" "2010-09-22" 199 600 "2010-08-01"
"2010-09-21" "2010-09-22" 199 670 "2010-08-20"
"2010-09-21" "2010-09-22" 199 710 "2010-09-01"
"2010-09-21" "2010-09-22" 199 870 "2010-09-21"
Что нужно группировать по (date1,date2)
и (cash,date)
таким образом, что date = max(date <= date1)
date1 date2 sc cash date
"2010-09-20" "2010-09-21" 202 870 "2010-09-21"
"2010-09-21" "2010-09-22" 199 870 "2010-09-21"
вам нужно использовать предложение HAVING... я просто предполагаю, что у вас есть идентификатор в каждой строке.. (если нет, вам придется изменить мой запрос, но это будет сложнее = D)
SELECT date1,date2,sc,cash,date
FROM mytable
WHERE id IN (SELECT id
FROM mytable GROUP BY date1,date2
HAVING max(date)>=date1)
Я тестировал его в Postgresql и отлично работал. Конечно, я не смог проверить его в MySql
Удача