2015-11-16 4 views
0

Мне нужно получить самые новые записи из нижележащей таблицы для каждого имени индикатора, например GI данных 2015-11-16 и GO 2015-11-14.Получить самые новые записи из таблицы mysql по имени столбца

Как я могу это достичь?

Благодаря

1

+1

Это наиболее часто задаваемый вопрос под этим тегом на SO. Он также правильно ответил довольно часто. Это пародия на намерения этого форума, тогда только один из предложенных ниже ответов правилен. – Strawberry

ответ

2

Есть много способов для достижения этой цели и называются group wise maximum https://dev.mysql.com/doc/refman/5.7/en/example-maximum-column-group-row.html

select t1.* from table_name t1 
join (
select indicator_name,max(indicator_date) as indicator_date from table_name 
group by indicator_name 
)t2 
on t1.indicator_name = t2.indicator_name 
and t1.indicator_date = t2.indicator_date 
+0

Если индикатор_значение уникален для каждого имени_имя, то это будет мой выбор решения – Kickstart

0
SELECT * from yourtable 
GROUP BY indicator_name 
ORDER BY indicator_date DESC 
+0

Это неправильно. GROUP BY работает до ORDER BY, что означает, что будет выбрана случайная дата. Мне бы хотелось знать, как оправдаться. – Strawberry

1

Если вы хотите последнюю строку для каждого indicator_name, то вы можете присвойте номер строки каждой группе строк indicator_name и или der по indicator_date в порядке убывания.

Запрос

select t1.indicator_id, 
     t1.indicator_name, 
     t1.indicator_value, 
     t1.indicator_date 
from 
(
    select indicator_id, 
      indicator_name, 
      indicator_value, 
      indicator_date, 
    (
     case indicator_name when @curA 
     then @curRow := @curRow + 1 
     else @curRow := 1 and @curA := indicator_name end 
    ) + 1 as rn 
    from tblIndicators t, 
    (select @curRow := 0, @curA := '') r 
    order by indicator_name,indicator_date desc 
)t1 
where t1.rn = 1; 

SQL Fiddle

0

Попробуйте это ...

SELECT * FROM table_name ORDER BY indicator_name,indicator_date DESC 
Смежные вопросы