2013-05-22 2 views
2

Проще говоря, у меня есть таблица, которая выглядит следующим образом:MySQL выбрать самый последний счет опроса каждого клиента

customer_surveys 
---------------- 
id | customer_id | score | date 
1 |   1 |  5 | 01-01-2013  
2 |   1 |  6 | 01-02-2013 
3 |   2 |  8 | 01-03-2013 
4 |   2 |  7 | 01-04-2013 

Я хочу, чтобы создать представление, которое выглядит следующим образом:

customer_survey_scores 
---------------------- 
customer_id | score 
1   | 6 
2   | 7 

Вид просто выбирает самую последнюю оценку опроса у каждого клиента.

Я смог достичь этого, написав сложный подзапрос, но нужно, чтобы это выполнялось как можно быстрее.

+0

См. GROUPWISE MAX – Strawberry

ответ

0
select c.customer_id, c.score 
from customer_surveys c 
inner join 
(
    select customer_id, max(date) as mdate 
    from customer_surveys 
    group by customer_id 
) x on x.customer_id = c.customer_id and x.mdate = c.date 
0

GROUP_CONCAT может быть использован для извлечения упорядочивания данных в группе:

SELECT customer_id, 
SUBSTRING_INDEX(GROUP_CONCAT(score ORDER BY `date` DESC), 1) AS latest_score 
FROM customer_surveys 
GROUP BY customer_id 

С помощью функции SUBSTRING_INDEX вы можете получить первый элемент в строке с разделителями.

Предыдущий ответ by @ juergen-d обязательно будет работать.

Смежные вопросы