2009-08-05 2 views
2

У меня есть таблица вроде этого:MySQL запросов с группой по и порядке

.--------------------------------. 
| Name | XX | Date    | 
.--------------------------------. 
| N1 | 5 | 2009-05-01  | 
| N1 | 10 | 2008-01-08  | 
| N2 | 8 | 2009-02-02  | 
.________________________________. 

Мой результат должен быть таким:

.------------. 
| Name | XX | 
.------------. 
| N1 | 5 | 
| N2 | 8 | 
.____________. 

Я просто хочу строк, сгруппированных по имени, но только новейшие. Я не хочу строку с XX = 10 в этом примере, потому что дата 2009-05-01> 2008-01-08.

Я не знаю, как сортировать по дате и группе она :(

ответ

2

Что вы хотите группировки для ?

select Name, XX 
    from yourTable t1 
where Date = (select MAX(Date) 
       from yourTable t2 
       where t1.Name = t2.Name) 

Если вам нужно просуммировать XX в последний день, то:

select Name, SUM(XX) 
    from yourTable t1 
where Date = (select MAX(Date) 
       from yourTable t2 
       where t1.Name = t2.Name) 
group by Name 
+0

группировки, потому что тогда вам не нужны подзапросы –

+0

@Justin: Группировка (как в вашем ответе) использует плохой «функция» MySQL, и она не соответствует требованиям ANSI и ISO. MySQL выбирает первую запись для полей, не упомянутых в разделе 'group by', хотя это недопустимо в соответствии со стандартами SQL. –

+0

Отлично, это работает отлично, спасибо ! – Fu86

0
SELECT Name, XX FROM myTable GROUP BY Name ORDER BY Date DESC 

Вы, возможно, придется поставить кавычки вокруг поля даты

`Date` 
+0

К сожалению, это не работает это :( – Fu86

0

Извините, но эти 2 неверны.

Вы должны

 
SELECT Name, XX 
FROM t1 
JOIN (SELECT Name, max(date) 
     FROM t1 
     GROUP BY Name) subquery 
    ON t1.Name = subquery.Name AND t1.Date = subquery.Date 

+0

@После того, как ваш запрос не может работать, так как вы должны иметь некоторую функцию агрегации через XX или иметь ее в GROUP BY: –

+0

@fizz: * «MySQL расширяет использование GROUP BY, чтобы разрешить выбор полей, которые не упоминаются в предложении GROUP BY». * (Http://dev.mysql.com/doc/refman/5.0/en/ select.html) Это недопустимо в соответствии со стандартами SQL, но MySQL это позволяет. –

+0

О, я вижу. Благодарю. странная особенность –

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