Stack Overflow em Português Asked on December 30, 2020
Alguém pode me dar uma orientação nessa consulta? Como encontrar a quantidade de possíveis shows assistidos?
Para os espectadores do dia “24/07/2020” que passaram na catraca antes do horário de início do show, liste o número do ingresso, a hora de entrada, o nome do espectador e quantidade de possíveis shows assistidos (considerando apenas o horário de entrada).
SELECT i.numero, i.horaentrada, p.nome
FROM pessoa P
INNER JOIN espectador E ON e.cpfpessoa = p.cpf
INNER JOIN ingresso I ON e.cpfpessoa = i.cpfespectador
INNER JOIN show S ON s.datalineup = i.datalineupentrada
WHERE i.pertencedatalineup = '24/07/2020' and i.horaentrada < s.horainicio;
Tabelas
Pessoa {cpf, nome}
Espectador {cpfpessoa, codigo}
Ingresso {numero, valor, datalineupentrada, horaentrada, cpfespectador, pertencedatalineup}
Lineup {datalineup}
Show {nomelocal, horainicio, datalineup}
Banda {nome, ordemapresentacao, nomelocalshow, datalineupshow, horainicioshow}
Saída
NUMERO HORAENTRAD NOME
3 21:00 Corina Brandan
3 21:00 Corina Brandan
8 22:00 Cristovao Aranha
Preciso que mostre a quantidade de shows assistidos com base no horário de entrada.
Eis uma possível solução:
-- código #1
-- © José Diz (Porto SQL)
with Comparecimento as (
SELECT numero, datalineupentrada, horaentrada, cpfespectador
from Ingresso
where datalineupentrada = convert (date, '24/7/2020', 103)
)
SELECT C.numero, C.horaentrada, P.nome, count(*) as [Shows assistidos]
from Comparecimento as C
inner join Pessoa as P on P.cpf = C.cpfespectador
inner join Show as S on s.datalineup = C.datalineupentrada
where S.horainicio >= C.horaentrada
group by C.numero, C.horaentrada, P.nome;
A CTE Comparecimento seleciona os ingressos que foram apresentados na data desejada. A partir dessa relação são obtidos o nome da pessoa e os shows que iniciariam após a entrada da pessoa.
Há fatores que podem confundir no momento de manipular datas no SQL Server, acarretando em erros na execução quase sempre relacionados ao desconhecimento de como o SQL Server interpreta os literais (strings) contendo data. Assim, sempre que fornecer datas como literal fique atento para utilizar de forma que não gere interpretações erradas, dependendo de como esteja configurado o LANGUAGE e/ou o DATEFORMAT da sessão. Exemplos de erros que podem ocorrer, e respectivas soluções, estão no artigo “Dominando datas e horas no SQL Server”.
Answered by José Diz on December 30, 2020
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP