Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lisa

Select um pouco complicado

Recommended Posts

Tenho a seguinte tabela

 

TABELA

 

id

nome

datahora_inicio

categoria

 

Uso o SqlServer

 

 

Tenho que selecionar o seguinte:

 

-contar todos os registros entre 2 datas ( de xx/xx/xxxx ate xx/xx/xxxxx) - esse eu consegui

- contar todos os itens de cada dia ( por exemplo: de 01/01/2006 ate 17/01/2006.... no dia 01/01/2006 teve o total de 3. no dia 17/01/2006 teve 5.. e por ai vai...

- contar todos os itens de cada dia por categoria. ou seja , no dia 01/01/2006 tivemos 10 registros, sendo que 2 foi da categoria "A" e 8 da categoria "B"

 

Gente, isso é possivel???

 

o que tenho agora é isso:

 

 

SELECT   COUNT(*) as totalFROM TABELAWHERE datahora_inicio BETWEEN '" & dataIniSQL & "' AND '" & dataFimSQL & "' ORDER BY datahora_inicio

Compartilhar este post


Link para o post
Compartilhar em outros sites

ola Carlos...a situação é um pouco diferente, pq envolve os dias...quero saber qantos itens tirevem e o total de categorias durante um certo periodo...Vamos por parte, como eu resolveria isso?- contar todos os itens de cada dia por categoria. ou seja , no dia 01/01/2006 tivemos 10 registros, sendo que 2 foi da categoria "A" e 8 da categoria "B"eu tenho o seguinte select:

SELECT   COUNT(*) as totalFROM TABELAWHERE datahora_inicio BETWEEN '" & dataIniSQL & "' AND '" & dataFimSQL & "' ORDER BY datahora_inicio
veja a tabela

TABELAidnomedatahora_iniciocategoria

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta o codigo abaixo:

 

SELECT   distinct datahora_inicio, categoria, COUNT(id) as totalFROM TABELAWHERE datahora_inicio BETWEEN '" & dataIniSQL & "' AND '" & dataFimSQL & "' group by datahora_inicio, categoria ORDER BY datahora_inicio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, o resultado não somou o total por categoria.. a alias "Total" ficou todos com o numero 1.por exemplo, esse select nao me responde que no dia xx/xx/xxxx eu tive 10 registros sendo eles :categoria A(7 - total) e B(3-total).entendeu??valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz no query analyzer...veja:SELECT distinct datahora_inicio, categoria, COUNT(Num) as totalFROM RequestWHERE datahora_inicio BETWEEN '2006/1/1 00:00:00' and '2006/4/29 00:00:00' group by datahora_inicio, categoria ORDER BY datahora_inicioresposta:datahora_inicio-----------------categoria-----------------------------------total2006-04-17 11:42:00 Categoria A 12006-04-17 19:27:00 Categoria A 12006-04-16 11:42:00 Categoria A 12006-04-16 19:27:00 Categoria B 12006-04-16 11:42:00 Categoria B 12006-04-18 19:27:00 Categoria A 12006-04-18 11:42:00 Categoria C 12006-04-18 19:27:00 Categoria B 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu problema são as horas no campo. Utilize o CDATE ou uma função específica do BD para que retorne apenas a DATA no campo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

------------------------------------------Resposta!ainda nao ta funcionando pq o CDATE tb exibe as horas...alguma dica para eu buscar somente a data??tentei usar o FormatDateTime((dataFimSQL),vbshortdate) mas tb nao funcionou!

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente o código abaixo, não sei se funciona pois nao fiz testes:

 

SELECT distinct datahora_inicio, categoria, COUNT(Num) as totalFROM RequestWHERE convert(smalldatetime, datahora_inicio, 103) BETWEEN '1/1/2006' and '29/04/2006' group by datahora_inicio, categoria ORDER BY datahora_inicio

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao funcionou... deu o seguinte erro:The conversion of char data type to smalldatetime data type resulted in an out-of-range smalldatetime value.Ai eu inverti as datas para ano/mes/diaSELECT distinct datahora_inicio, categoria, COUNT(Num) as totalFROM RequestWHERE convert(smalldatetime, datahora_inicio, 103) BETWEEN '2006/1/1' and '2006/4/29' group by datahora_inicio, categoria ORDER BY datahora_iniciofuncinou como antes... ele nao juntou por causa da hora..... ainda o problema da hora!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acrescente o Convert na clausula "GROUP BY" e teste.

Compartilhar este post


Link para o post
Compartilhar em outros sites

aconteceu o seguinte erro:

 

 

Column 'Request.datahora_inicio' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

 

veja como ficou meu sql...

 

SELECT distinct datahora_inicio, categoria, COUNT(Num) as totalFROM RequestWHERE convert(smalldatetime, datahora_inicio, 103) BETWEEN '2006/1/1' and '2006/4/29' group by convert(smalldatetime, datahora_inicio, 103), categoria ORDER BY datahora_inicio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais um "chute", acrescente também no SELECT.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nada!! retorna comparando com a hora tb...

 

 

ate titei order by

 

SELECT distinct convert(smalldatetime, datahora_inicio, 103) , categoria, COUNT(Num) as totalFROM RequestWHERE convert(smalldatetime, datahora_inicio, 103) BETWEEN '2006/4/17' and '2006/4/18' group by convert(smalldatetime, datahora_inicio, 103) , categoria

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posso dar uma sugestão off tópicNão desprezando a galera do ASP, sei que tem ÓTIMOS usuarios que manjam de SQL animal, mas posta esse tópico tambem no SQL Server, que lá a gaera mais especializada que ome, SQL com farinha talvez te ajude tambem...Alem que você pode ajudar muita gente aqui, mesmo que isso não seja util para mim hoje, é algo a mais que acrescenta no meu conhecimento... rsBoa sorte ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.