Contar periodos da manhã e da tarde em um range de datas - sql

02/05/2019

0

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.
Ricardo

Ricardo

Responder

Posts

03/05/2019

João Santos

Olá Ricardo,
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
Responder

03/05/2019

Emerson Nascimento

Pelo que eu entendi esta avaliação é diária, certo?

- 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

Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar