TransWikia.com

SQL dúvida em consulta

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.

One Answer

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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP