• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

4 mensagens neste tópico

Boas!

Estou aqui a fazer uma query e não estou a conseguir... deve ser do sono :D

Esta-me a dar sempre o max(data) para o tipo 1 e 2 e eu só queria para um deles conforme o max(data)

SELECT tab1.id_tab1, MAX( tab2.data),tab2. tipo
WHERE tab2. tipo = '1' OR tab2. tipo = '2'
FROM tab1 INNER JOIN
tab2 ON tab2.id_tab1 = tab1.id_tab1
GROUP BY tab1.id_tab1, tipo
ORDER BY tab1.id_tab1

Tenho 2 tabelas

tab1(id_tab1)

tab2(id_tab2, id_tab1, data, tipo)

imaginemos: 

tab1 (dados)

----------------

id_tab1 = 1

id_tab1 = 2

id_tab1 = 3

tab2 (dados)

-----------------

(1, 1, 10-10-2007, 1) , o bold é o tipo

(2, 1, 12-10-2007, 2) , destes dois dava-me apenas esta 2 linha porque a data é a mais recente

(1, 2, 10-10-2007, 1)

(2, 2, 12-10-2007, 2)

(2, 1, 12-10-2007, 3)

(1, 3, 10-10-2007, 1)

Eu queria que o resultado da query fosse que para todos os ids na tab1 me desse MAX(data) desse id mas so para o tipo 1 ou 2...

(tab1.id_tab1,  tab2.data, tipo)

Resultado:

---------------------------------

( 1, 12-10-2007, 2)

( 2, 12-10-2007, 2)

( 3, 10-10-2007, 1)

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas!

Antes de mais, tens uma ordem para colocar as coisas no SQL, o where só aparece após o from. Isso é capaz de ajudar a não obteres os resultados desejados.

SELECT tab1.id_tab1, MAX( tab2.DATA),tab2. tipo
FROM tab1 INNER JOIN
tab2 ON tab2.id_tab1 = tab1.id_tab1
WHERE tab2. tipo = '1' OR tab2. tipo = '2'
ORDER BY tab1.id_tab1
GROUP BY tab1.id_tab1, tipo

Vê se isto se aproxima melhor dos resultados que pretendes. Não percebi muito bem qual o resultado final que queres...

abraços, HecKel

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas!

Antes de mais, tens uma ordem para colocar as coisas no SQL, o where só aparece após o from. Isso é capaz de ajudar a não obteres os resultados desejados.

SELECT tab1.id_tab1, MAX( tab2.DATA),tab2. tipo
FROM tab1 INNER JOIN
tab2 ON tab2.id_tab1 = tab1.id_tab1
WHERE tab2. tipo = '1' OR tab2. tipo = '2'
ORDER BY tab1.id_tab1
GROUP BY tab1.id_tab1, tipo

Vê se isto se aproxima melhor dos resultados que pretendes. Não percebi muito bem qual o resultado final que queres...

abraços, HecKel

Não sei como fiz mas copiei mal a query aki para o fórum...  eu testei na ordem certa (WHERE, etc), e penso q dava erro se assim não o fizesse.

O problema parece estar no group by pq sou obrigado a meter o TIPO la se eu o tirar da query da-me o resultado certo... tenho de ver como dar a volta a isto.

obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já resolvi... :cheesygrin:  Tive que andar a brincar com transact sql

case when... resolveu-me e assim não precisei de meter o TIPO no GROUP BY.

De qq modo obrigado por tentares ajudar HecKel :P

Estamos sempre aprender e isso é que torna esta vida mais bonita....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora