|
|
Mensagem do
TRANSVILLE
em 30/10/2017, 15:30 h
Local: SC Registro: 30/10/2017 Postagens: 12 |
Edmilson Wessling
Boa tarde!
preciso de um comando que retorne o total de coletas realizadas no dia anterior, porém, quando é segunda feira o comando precisa retornar o total de sexta. Alguém pode me ajudar?
Select
COUNT(A.NrColeta) as Coleta
From CCEColet A
Where A.DtEmissao < DATEADD(day, 0, convert(date, GETDATE())) and A.DtEmissao > DATEADD(day, 0, convert(date, GETDATE()-3))
and (A.InSituacao = 0 or A.InSituacao is Null) |
|
|
Mensagem do
ROBERTOMEN
em 30/10/2017, 16:26 h
Local: PR Registro: 04/07/2017 Postagens: 442 |
dData := date() // data atual
dData := date() -1 // dia anterior
if dow(dData) = 2 // Se for Segunda Feira,,volta pra sexta
dData = dData -3
endif
Select
COUNT(A.NrColeta) as Coleta
From CCEColet A
Where A.DtEmissao = DATEADD(day, 0, convert(date, dData ))
and (A.InSituacao = 0 or A.InSituacao is Null)
Seria isto?
|
|
|
Mensagem do
EMERSON.EN
em 30/10/2017, 17:14 h
Local: SP Registro: 20/08/2010 Postagens: 670 |
Se você quer resolver tudo na instrução SQL e estiver usando o SQL Server, tente:
Select A.DtEmissao, COUNT(A.NrColeta) as Coleta
From CCEColet A
Where coalesce(A.InSituacao,0) = 0
and A.DtEmissao = (GETDATE() - CASE DATEPART(WEEKDAY, GETDATE() - 1)
WHEN 1 THEN 3
WHEN 7 THEN 2
ELSE 1 END)
Group by A.DtEmissao
Retorna as coletas do dia anterior, a partir da data do banco de dados. Se segunda, domingo ou sábado, pega o total da sexta-feira anterior.
A instrução acima assume que o primeiro dia da semana no banco de dados seja domingo.
|
|
|
Mensagem do
TRANSVILLE
em 31/10/2017, 10:32 h
Local: SC Registro: 30/10/2017 Postagens: 12 |
Edmilson Wessling
Roberto, Emerson, bom dia!
Obrigado pela resposta. Porém, não funcionou o código de vocês. Quero rodar isso direto no sql server. Como não sou especialista em SQL, talvez falte ajustar algum parâmetro no comando de vocês, podem me ajudar? |
|
|
Mensagem do
EMERSON.EN
em 31/10/2017, 14:22 h
Local: SP Registro: 20/08/2010 Postagens: 670 |
A instrução que eu te passei deveria rodar diretamente no SQL Server.
O que você quer dizer com "não funcionou"? Deu erro? Não trouxe os dados como você esperava?
tente o seguinte:
DECLARE @data datetime
SET @data = ‘2017-10-23‘
Select
@data DIA_AVALIADO,
(@data - 1) DIA_ANTERIOR,
@data - CASE DATEPART(WEEKDAY, @data - 1)
WHEN 1 THEN 3
WHEN 7 THEN 2
ELSE 1 END DIA_CONSIDERADO
basta trocar o conteúdo de @data e executar a instrução. fiz o teste e funcionou perfeitamente.
|
|
|
Mensagem do
TRANSVILLE
em 31/10/2017, 16:26 h
Local: SC Registro: 30/10/2017 Postagens: 12 |
Edmilson Wessling
Emerson, boa tarde!
Desculpe pelo incomodo. O seu código esta correto, contudo a porcaria do meu sistema grava as informações date+hora. Então, acho que preciso retornar tudo que foi emitido no período das 00:01 até 23:59 do dia útil anterior. É possível?
Teu código esta correto, mas preciso acrescentar a faixa de hora
Select A.DtEmissao, COUNT(A.NrColeta) as Coleta
From CCEColet A
Where coalesce(A.InSituacao,0) = 0
and A.DtEmissao = (GETDATE() - CASE DATEPART(WEEKDAY, GETDATE() - 1)
WHEN 1 THEN 3
WHEN 7 THEN 2
ELSE 1 END) |
|
|
Mensagem do
TRANSVILLE
em 31/10/2017, 16:28 h
Local: SC Registro: 30/10/2017 Postagens: 12 |
Edmilson Wessling
Ou melhor, tem algum forma de considerar apenas a data do campo e desconsiderar a hora? |
|
|
Mensagem do
TRANSVILLE
em 31/10/2017, 16:31 h
Local: SC Registro: 30/10/2017 Postagens: 12 |
Edmilson Wessling
Segue o print da consulta.
Select A.DtEmissao, COUNT(A.NrColeta) as Coleta
From CCEColet A
Where coalesce(A.InSituacao,0) = 0
and A.DtEmissao = (GETDATE() - CASE DATEPART(WEEKDAY, GETDATE() - 1)
WHEN 1 THEN 3
WHEN 7 THEN 2
ELSE 1 END)
Então a consulta esta correta, porém não retorna informações pq meu sistema grava a hora, para saber tudo que foi emitido no dia útil anterior, preciso também especificar a faixa de hora entre 00:00:01 e 23:59:00.
Consegue me ajudar? |
|
|
Mensagem do
TRANSVILLE
em 31/10/2017, 17:03 h
Local: SC Registro: 30/10/2017 Postagens: 12 |
Edmilson Wessling
Quando eu informo na condição A.DtEmissao >= retorna o total de coletas de ontem e hoje. Porém eu preciso apenas das coletas de ontem.
Tentei fazer duas condições uma com A.DtEmissao > e outra com A.Dtemissao < porém não retorna nenhum valor.
DECLARE @data datetime
SET @data = cast(getdate() as date)
Select COUNT(A.NrColeta) as Coleta
From CCEColet A
Where coalesce(A.InSituacao,0) = 0
and A.DtEmissao >= @data - CASE DATEPART(WEEKDAY, @data -1)
WHEN 1 THEN 3
WHEN 7 THEN 2
ELSE 1 END |
|
|
Mensagem do
TRANSVILLE
em 31/10/2017, 17:05 h
Local: SC Registro: 30/10/2017 Postagens: 12 |
Edmilson Wessling
Comando abaixo retorna 1021 coletas:
30/10 - 538
31/10 - 483
total - 1021
DECLARE @data datetime
SET @data = cast(getdate() as date)
Select COUNT(A.NrColeta) as Coleta
From CCEColet A
Where coalesce(A.InSituacao,0) = 0
and A.DtEmissao >= @data - CASE DATEPART(WEEKDAY, @data -1)
WHEN 1 THEN 3
WHEN 7 THEN 2
ELSE 1 END |
|
|
Mensagem do
ROBERTOMEN
em 01/11/2017, 08:30 h
Local: PR Registro: 04/07/2017 Postagens: 442 |
DECLARE @data datetime
SET @data = cast(getdate() as date)
Select COUNT(A.NrColeta) as Coleta
From CCEColet A
Where coalesce(A.InSituacao,0) = 0
and A.DtEmissao >= @data - CASE DATEPART(WEEKDAY, @data -1)
WHEN 1 THEN 2
WHEN 7 THEN 1
END
tente assim,,,eu entendi o seguinte:
se vc imprimir na terça,,sai as coletas de segunda feira,,se imprimir na quarta,,sai as de terça,,se imprimir na quinta,,sai as de quarta....se imprimir na segunda feira,no sábado ou no domindo ,,sai as de sexta feita. |
|
|
Mensagem do
EMERSON.EN
em 01/11/2017, 09:01 h
Local: SP Registro: 20/08/2010 Postagens: 670 |
Roberto, nesse seu ultimo post, dependendo do horário que ele executar a consulta, o resultado mostrará a consulta do dia anterior e também do dia corrente.
O ideal é avaliar somente a parte "data" do campo.
Select A.DtEmissao, COUNT(A.NrColeta) as Coleta
From CCEColet A
Where coalesce(A.InSituacao,0) = 0
and cast(A.DtEmissao as date) = (GETDATE() - CASE DATEPART(WEEKDAY, GETDATE()- 1)
WHEN 1 THEN 3
WHEN 7 THEN 2
ELSE 1 END)
|
|
|
Mensagem do
EMERSON.EN
em 01/11/2017, 09:04 h
Local: SP Registro: 20/08/2010 Postagens: 670 |
ops... faltou o Group By A.DtEmissao ou a retirada do campo A.DTEmissao do resultado.
|
|
|
Mensagem do
TRANSVILLE
em 01/11/2017, 12:49 h
Local: SC Registro: 30/10/2017 Postagens: 12 |
Edmilson Wessling
Emerson, boa tarde!
Não gera, pois o meu sistema grava os registros do campo DtEmissao que é do tipo datetime. por isso tem que ser > que ontem e < que hoje. Mas eu não consigo fazer essa lógica no sql.
Se o campo DtEmissao fosse do tipo data o comando estaria funcionando certo. |
|
|
Mensagem do
EMERSON.EN
em 01/11/2017, 14:23 h
Local: SP Registro: 20/08/2010 Postagens: 670 |
você testou com a última instrução que eu passei?
porque nela é tratada somente a parte "data" do campo.
Select COUNT(A.NrColeta) as Coleta
From CCEColet A
Where coalesce(A.InSituacao,0) = 0
and cast(A.DtEmissao as date) = (GETDATE() - CASE DATEPART(WEEKDAY, GETDATE()- 1)
WHEN 1 THEN 3
WHEN 7 THEN 2
ELSE 1 END)
note que no where, onde há referencia ao campo A.DtEmissao, agora é utilizada a função CAST() que transforma o conteúdo em data.
faça um teste:
Select A.DtEmissao, cast(A.DtEmissao as date) so_data
From CCEColet A
as duas colunas retornam o mesmo valor?
|
|
|
Mensagem do
TRANSVILLE
em 01/11/2017, 17:59 h
Local: SC Registro: 30/10/2017 Postagens: 12 |
Edmilson Wessling
Emerson,
o primeiro sql retornou 0
o segundo sql retornou null
|
|
|
Mensagem do
EMERSON.EN
em 04/11/2017, 15:01 h
Local: SP Registro: 20/08/2010 Postagens: 670 |
É minha última tentativa, visto que a forma passada já deveria ter funcionado:
Select COUNT(A.NrColeta) as Coleta
From CCEColet A
Where coalesce(A.InSituacao,0) = 0
and convert(varchar(10), A.DtEmissao, 103) = convert(varchar(10), (GETDATE() - CASE DATEPART(WEEKDAY, GETDATE()- 1)
WHEN 1 THEN 3
WHEN 7 THEN 2
ELSE 1 END), 103)
apenas verifique se a sintaxe da função convert() está correta, porque onde estou agora não tem SQL Server instalado.
|
|
|
Mensagem do
TRANSVILLE
em 06/11/2017, 08:32 h
Local: SC Registro: 30/10/2017 Postagens: 12 |
Edmilson Wessling
Emerson, bom dia!
Funcionou, retornou as coletas de sexta. Muito obrigado. |
|
Para postar no Fórum você precisa efetuar o seu login ou se registrar
|
|