Existe uma maneira de agrupar e comparar o registro atual com os registros anteriores ao ler de uma tabela. Minha tabela é algo como abaixo.
ID PASSED LEVEL CREATEDATE
100 1 2 2016-01-10 07:35:02.123
100 1 2 2016-01-10 07:05:33.135
100 0 2 2016-01-09 08:35:29.123
100 1 2 2016-01-08 09:35:30.123
100 1 1 2016-01-07 11:35:31.123
101 1 1 2016-01-10 08:45:12.123
102 1 1 2016-01-10 09:45:22.222
102 1 1 2016-01-09 08:15:29.123
103 0 1 2016-01-10 07:35:02.123
103 1 2 2016-01-09 06:35:29.023
Idealmente, preciso retornar um valor BIT para cada ID na tabela.
A condição do valor BIT é retornar 1 para cada ID quando PASSED é 1 e os NÍVEIS são diferentes por ordem CREATEDATE DESC.
Então, na minha tabela de exemplo, o valor BIT para
- ID 100 retornaria 1 porque PASSED é 1 no primeiro e no quarto registro (o nível muda no quarto registro).
- ID 101 retornaria um valor BIT de 0 porque há apenas 1 registro PASSED com valor 1.
- ID 102 retornaria um valor de BIT de 0 porque os NÍVEIS são os mesmos para ambos os registros, embora PASSED fosse 1 em ambos os registros.
- O ID 103 retornaria 0 porque ambos os registros não PASSARAM, embora os NÍVEIS sejam diferentes.
Esperando que uma consulta possa ser estruturada de forma que a resposta seja assim:
ID STATUS_PASSED
100 1
101 0
102 0
103 0
Obrigado por qualquer ajuda fornecida.
Isso parecia um problema de divisão relacional para mim:
Não incluí a
CREATEDATE
coluna no cálculo porque não parece acrescentar muito. Além disso, realmente faz sentido alguém passar em um curso no mesmo nível duas vezes (conforme ID 100 em seus dados de amostra)? A ordem em que eles passam nos cursos realmente importa? Nesse caso, isso pode causar um bug no meu código ondeSum of PASSED >= COUNT ( DISTINCT LEVEL )
. Pré-agregar os dados resolveria isso, por exemploSe a data for realmente importante, poste novamente e precisaremos de uma consulta um pouco mais complicada, basicamente o
PASSED
status associado aomax date per ID
.HTH