Contar periodos da manhã e da tarde em um range de datas - sql
Tenho um range de datas com diversos lançamentos no período da tarde e da manhã, por exemplo, do dia 10/04/2019 até 20/04/2019 registros entre 8 e 11hs59mins são manhã, registros de 12hs e 17:59 são tarde.
Nesse período, portanto, tenho registros no banco MSSQL referente a atendimentos, diversos.
Caso eu tenha qualquer atendimento na manhã, preciso contabilizar em minha consulta 1 (um) período.
Caso eu tenha qualquer atendimento na parte da tarde, preciso contabilizar em minha consulta 1(um) período.
Dessa forma, em caso de eu ter pelo menos um atendimento pela manhã e um atendimento a tarde, preciso contabilizar em minha consulta SQL 2 (dois) períodos.
Se eu tiver dez atendimentos na manhã e dez a tarde, eu contabilizo 2 (dois) períodos da mesma forma.
Como posso criar essa consulta SQL?
Estou com dificuldade em agrupar e contar os períodos, validando se há registros ou não naquele período.
Nesse período, portanto, tenho registros no banco MSSQL referente a atendimentos, diversos.
Caso eu tenha qualquer atendimento na manhã, preciso contabilizar em minha consulta 1 (um) período.
Caso eu tenha qualquer atendimento na parte da tarde, preciso contabilizar em minha consulta 1(um) período.
Dessa forma, em caso de eu ter pelo menos um atendimento pela manhã e um atendimento a tarde, preciso contabilizar em minha consulta SQL 2 (dois) períodos.
Se eu tiver dez atendimentos na manhã e dez a tarde, eu contabilizo 2 (dois) períodos da mesma forma.
Como posso criar essa consulta SQL?
Estou com dificuldade em agrupar e contar os períodos, validando se há registros ou não naquele período.
Ricardo
Curtidas 0
Respostas
João Santos
02/05/2019
Olá Ricardo,
existe creio eu duas formas dese fazer essa contagem
Também pode ser usar o case
Espero ter ajudado
existe creio eu duas formas dese fazer essa contagem
SELECT COUNT(IF(hora => 8 AND hora <= 11:59 )) AS MANHA,COUNT(IF(hora => 12 AND hora <= 17:59 )) AS TARDE, FROM tabela;
Também pode ser usar o case
SELECT COUNT(case when hora => 8 AND hora <= 11:59 then i++ ) AS MANHA, COUNT(case when hora => 12 AND hora <= 17:59 then i++ ) AS TARDE, FROM tabela;
Espero ter ajudado
GOSTEI 0
Emerson Nascimento
02/05/2019
Pelo que eu entendi esta avaliação é diária, certo?
- ser for avaliação diária:
- se for avaliacao geral:
- ser for avaliação diária:
SELECT CAST(T.data AS DATE) DIA, MAX(CASE WHEN CAST(T.data AS TIME) < '12:00' THEN 'SIM' ELSE 'NAO' END) MANHA, MAX(CASE WHEN CAST(T.data AS TIME) >= '12:00' THEN 'SIM' ELSE 'NAO' END) TARDE, MAX(CASE WHEN CAST(T.data AS TIME) < '12:00' THEN 1 ELSE 0 END)+ MAX(CASE WHEN CAST(T.data AS TIME) >= '12:00' THEN 1 ELSE 0 END) PERIODOS FROM Tabela T GROUP BY CAST(T.data AS DATE)
- se for avaliacao geral:
SELECT MAX(CASE WHEN CAST(T.data AS TIME) < '12:00' THEN 'SIM' ELSE 'NAO' END) MANHA, MAX(CASE WHEN CAST(T.data AS TIME) >= '12:00' THEN 'SIM' ELSE 'NAO' END) TARDE, MAX(CASE WHEN CAST(T.data AS TIME) < '12:00' THEN 1 ELSE 0 END)+ MAX(CASE WHEN CAST(T.data AS TIME) >= '12:00' THEN 1 ELSE 0 END) PERIODOS FROM Tabela T
GOSTEI 0