Ir para conteúdo
Fórum Script Brasil
  • 0

Consulta sql count(distinct)


Guest --Rafael --

Pergunta

Guest --Rafael --

Tenho uma tabela contentendo rota, parada, ponto, endereço, horario programado.

Preciso mostrar a quantidade de paradas que tenho por rota, porem os pontos podem se repetir e posso ter pontos diferentes em um mesmo endereço, dessa forma considerarei 1 parada para cada endereço, assim é facil. Mas o agravante é que pode acontecer dessa parada ter o horario programado com mais de 2 horas entre as paradas do mesmo endereço, assim devo considerar 2 paradas. como faria isso???

Exemplo:

rota parada ponto endereço horario programado

001 1 A AAAA 8:00

001 2 A AAAA 8:10

001 3 B BBBB 10:00

001 4 C AAAA 11:00

001 5 D AAAA 11:30

001 6 E EEEE 18:00

teria que trazer para rota 001, 4 paradas, ou seja as que estiverem no mesmo endereço e no entre 2 horas considerar 1.

Select que eu fiz (incompleto)

select rota, count (distinct endereco) from ...... where......

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0

Neste exemplo:

declare @tab table (rota varchar(5), parada int, ponto varchar(15), endereço varchar(15), horario char(5))
insert into @tab (rota , parada , ponto , endereço , horario) values ('001',1,'A','AAAA','8:00')
insert into @tab (rota , parada , ponto , endereço , horario) values ('001', 2,'A','AAAA','8:10')
insert into @tab (rota , parada , ponto , endereço , horario) values ('001', 3,'B','BBBB','10:00')
insert into @tab (rota , parada , ponto , endereço , horario) values ('001', 4,'C','AAAA','11:00')
insert into @tab (rota , parada , ponto , endereço , horario) values ('001', 5, 'D','AAAA','11:30')
insert into @tab (rota , parada , ponto , endereço , horario) values ('001', 6 ,'E', 'EEEE','18:00')

select rota,endereço,count(rota) from  @tab
group by rota,endereço

Aconselho a usar group by.

Seria possivel ser mais claro, dado o exemplo acima, qual seria o retorno que desejas?

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --rafael --

Cara eu já usei o group by, porém é mais complicado o problema.

Diante do exemplo abaixo

rota - parada - ponto - endereço - horario programado

001 - 1 - A - AAAA - 8:00

001 - 2 - A - AAAA - 8:10

001 - 3 - B - BBBB - 10:00

001 - 4 - C - AAAA - 11:00

001 - 5 - D - AAAA - 11:30

001 - 6 - E - EEEE - 18:00

Preciso que me retorne o seguinte:

001 - 1 - A - AAAA - 8:00

001 - 3 - B - BBBB - 10:00

001 - 4 - C - AAAA - 11:00

001 - 6 - E - EEEE - 18:00

Ou seja, preciso agrupar por enderço, porem se o tempo entre os itens agrupados for maior que 2 horas não pode agrupar. E depois disso preciso mostrar a quantidade de paradas por rota com esse conceito. Nesse caso seria 4 para a 001.

Desde já agradeço.

Link para o comentário
Compartilhar em outros sites

  • 0

Cara é possivel fazer o que você quer.

Me diz qual o tipo do capo horario?

No resultado desejado que você postou:

001 - 1 - A - AAAA - 8:00

001 - 3 - B - BBBB - 10:00

001 - 4 - C - AAAA - 11:00

001 - 6 - E - EEEE - 18:00

A linha 001 - 4 - C - AAAA - 11:00 deveria mesmo aparecer?

Estas duas horas de diferença é em relação ao que? Ao registro anterior ou primeiro registro.

Editado por jothaz
Link para o comentário
Compartilhar em outros sites

  • 0
Guest --rafael --

O campo horario é varchar;

A linha 001 - 4 - C - AAAA - 11:00 deveria mesmo aparecer;

As 2 horas de diferença é em relação ao registro anterior. Como no exemplo, A linha 001 - 4 - C - AAAA - 11:00 aparece, porem a 001 - 2 - A - AAAA - 8:10 e a

001 - 5 - D - AAAA - 11:30 não devem aparecer.

Obrigado pela atenção, se puder ajudar me fará um grande favor...

Link para o comentário
Compartilhar em outros sites

  • 0
O campo horario é varchar;

A linha 001 - 4 - C - AAAA - 11:00 deveria mesmo aparecer;

As 2 horas de diferença é em relação ao registro anterior. Como no exemplo, A linha 001 - 4 - C - AAAA - 11:00 aparece, porem a 001 - 2 - A - AAAA - 8:10 e a

001 - 5 - D - AAAA - 11:30 não devem aparecer.

Obrigado pela atenção, se puder ajudar me fará um grande favor...

Não comprrendi qual a lógica da diferença das 2 horas! Desculpe-me mas não patei.

No exemplo:

rota - parada - ponto - endereço - horario programado

001 - 1 - A - AAAA - 8:00

001 - 2 - A - AAAA - 8:10

001 - 3 - B - BBBB - 10:00

001 - 4 - C - AAAA - 11:00

001 - 5 - D - AAAA - 11:30

001 - 6 - E - EEEE - 18:00

Em relação a qual registro anterior você se basea?

Pelo que estou entendendo você quer recuperar somente as horas completas: 08:00, 09:00 e etc.

Cara da uma olhada nisto:

declare @tab table (rota varchar(5), parada int, ponto varchar(15), endereço varchar(15), horario char(5))
insert into @tab (rota , parada , ponto , endereço , horario) values ('001',1,'A','AAAA','8:00')
insert into @tab (rota , parada , ponto , endereço , horario) values ('001', 2,'A','AAAA','8:10')
insert into @tab (rota , parada , ponto , endereço , horario) values ('001', 3,'B','BBBB','10:00')
insert into @tab (rota , parada , ponto , endereço , horario) values ('001', 4,'C','AAAA','11:00')
insert into @tab (rota , parada , ponto , endereço , horario) values ('001', 5, 'D','AAAA','11:30')
insert into @tab (rota , parada , ponto , endereço , horario) values ('001', 6 ,'E', 'EEEE','18:00')

select rota,endereço,min(horario)

from  @tab
group by rota,endereço,       case  
            when len(rtrim(ltrim((horario)))) = 4  then 
                '0' + substring(rtrim(ltrim(horario)),1,2)
            else 
                substring(rtrim(ltrim(horario)),1,3)
       end

No aguardo.

Editado por jothaz
Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Rafael --

Não é isso, eu tentei dessa forma tb, mas é o seguinte. Vou explicar a situação:

Existe um carro que faz a sua rota, ele passa por diversos pontos, definidos como paradas. Esses pontos, podem ser no mesmo endereço, por isso preciso mostrar somente a quantidade de paradas com endereços diferentes, pois imagine a situação o carro vai para um shoping e atende varias lojas nesse caso eu devo considerar apenas uma parada. Porem se houver um ponto com horario de atendimento superior a 2 horas quer dizer que o carro voltou ao local dessa forma devo considerar outra parada.

rota - parada - ponto - endereço - horario programado

001 - 1 - A - AAAA - 8:05

001 - 2 - A - AAAA - 8:10

001 - 3 - B - BBBB - 10:00

001 - 4 - C - AAAA - 11:00

001 - 5 - D - AAAA - 11:30

001 - 6 - E - EEEE - 18:00

Preciso que me retorne o seguinte:

001 - 1 - A - AAAA - 8:05

001 - 3 - B - BBBB - 10:00

001 - 4 - C - AAAA - 11:00

001 - 6 - E - EEEE - 18:00

Link para o comentário
Compartilhar em outros sites

  • 0
alguém sabe como resolver esse problema, se é que há solução?? Quem puder ajudar agradeço muito.

não imagino uma possivel solucao com query já q o resultado depende da sequencia de registros. se ele dependesse do registro imediatamente anterior, dependendo seria possivel fazer sim baseado na chave com um inner join da chave com a propria chave - 1.

agora como o endereco AAAA pode aparecer em varios lugares diferentes com intervalo entre os registros e como pontos diferentes não influenciam em nd e tendo q considerar o intervalo da hora, acho q fica meio impossivel.

mas tem q ser por query?? onde você precisa exibir o resultado??

você não esta usando nenhuma linguagem de programacao, tipo visual basic, php etc??

não pode fazer pela linguagem??

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --rafael --

é cara imaginei que seria quase impossível. o complicado que não posso pegar os dados por liguagem de prgramação, pois executo os filtros em um sistema que possui um "gerador" de querys sql, dessa forma desenvolvo os scripts em sqlserver e executo nesse gerador.

mas vlw agradeço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...