Pergunta

Eu tenho uma tabela como esta:

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

Meu resultado deve ser esta:

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

Eu só quero as linhas, agrupadas pelo nome, mas apenas os mais recentes. Eu não quero a linha com XX = 10 neste exemplo porque a data 2009-05-01> 2008-01-08.

Eu não sei como classificar por data e grupo que: (

Foi útil?

Solução

O que você quer que o agrupamento para?

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

Se você precisa para resumir XX para o último dia, então:

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

Outras dicas

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

Você pode precisar colocar aspas em torno de seu campo de data

`Date`

Desculpe, mas estes 2 estão ambos errados.

Você deve

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top