2015-07-23 4 views
0

Это мой стол:Как мне получить последнюю запись?

create table test (
id string, 
name string, 
age string, 
modified string) 

и это мои данные:

id name age modifed 
1  a  10 2011-11-11 11:11:11 
1  a  11 2012-11-11 12:00:00 
2  b  20 2012-12-10 10:11:12 
2  b  20 2012-12-10 10:11:12 
2  b  20 2012-12-12 10:11:12 
2  b  20 2012-12-15 10:11:12 

Я хочу, чтобы получить последнюю запись (включить все столбцы ID, имя, возраст, модифицированную) группу по идентификатору, в приведенных выше данных, правильный результат:

1  a  11 2012-11-11 12:00:00 
2  b  20 2012-12-15 10:11:12 

Я использую ниже запроса в улье, он работает отлично в SQL http://sqlfiddle.com/#!2/bfbd5/42, но он не работает нормально в улье

select * from test where (id, modified) in(select id, max(modified) from test group by id) 

Я использую версию улья 0.13.

ответ

0

Улей разрешает только один столбец в подзапросе IN. Попробуйте левый semijoin:

SELECT * 
FROM test a 
LEFT SEMI JOIN 
(select id, max(modified) as modified from test) b 
ON (a.modified = b.modified and a.id=b.id); 

Он уверен, кажется, что вы могли бы легко получить, он сразу же ответить, используя прямой прямой запрос, хотя. Выберите максимум двух столбцов и обязательно группируйте столбцы, которые не имеют агрегированных функций.

select id 
, name 
, max(age) as age 
, max(modified) as modified 
from test 
group by id, name; 

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

  • Нет связанных вопросов^_^