Inquiridor
Controle de Acesso

Pergunta
-
Boa noite Pessoal,
Gostaria de saber como fazer para verificar uma determinada sequencia de registro de acesso nos equipamentos. Tenho a seguinte tabela:
DATA MATRICULA PESSOA EQUIPAMENTO ORIGEM DESTINO SENTIDO SENTIDO TP_EVENTO NOME EQUIP.
2014-01-01 05:55:10.000 73 MARIA JOSE DE MELO NASCIMENTO 2 1 2 Entrou Nas dependências do Hospital 1 10 CATRACA ENTRADA FUNCIONÁRIOS
2014-01-01 06:01:50.000 73 MARIA JOSE DE MELO NASCIMENTO 3 2 3 Entrou No refeitório 1 10 CATRACA REFEITÓRIO
2014-01-01 06:17:33.000 73 MARIA JOSE DE MELO NASCIMENTO 3 3 2 Saiu No refeitório 2 10 CATRACA REFEITÓRIO
2014-01-01 11:37:10.000 73 MARIA JOSE DE MELO NASCIMENTO 3 2 3 Entrou No refeitório 1 10 CATRACA REFEITÓRIO
2014-01-01 12:04:01.000 73 MARIA JOSE DE MELO NASCIMENTO 3 3 2 Saiu No refeitório 2 10 CATRACA REFEITÓRIO
2014-01-01 16:34:00.000 73 MARIA JOSE DE MELO NASCIMENTO 3 2 3 Entrou No refeitório 1 10 CATRACA REFEITÓRIO
2014-01-01 16:37:53.000 73 MARIA JOSE DE MELO NASCIMENTO 3 3 2 Saiu No refeitório 2 10 CATRACA REFEITÓRIO
2014-01-01 17:35:09.000 73 MARIA JOSE DE MELO NASCIMENTO 2 2 1 Saiu Nas dependências do Hospital 2 10 CATRACA ENTRADA FUNCIONÁRIOSNeste exemplo o funcionário fez a ordem certa
1º passou na catraca de acesso ao hospital
depois ele vez as suas refeições na catraca do refeitório entrada / saída
e por fim no final do expediente ele passou sentido saída na catraca de funcionários
Mas se um dia ele não fizer a mesma ordem cronológica ( entrada catraca 1, entrada catraca 3, saida catraca3 e sadia catraca1)
gostaria de gerar uma query com a data do ocorrido.
att cirilo
Todas as Respostas
-
Bom se bem entendi, você precisa gerar uma query SQL que lhe mostre a sequencia que o funcionario passou pelos equipamentos, um problema é que nem sempre ele seguira a mesma ordem isso dependerá muito do formato fisico que os equipamentos estão e também da ordem que esse funcionario pode passar pelos equipamento, eu tenho uma situação parecida onde tenho relogios de registro de ponto eletronico e catrcas de controle de acesso, o que eu faço é o seguinte.
Eu gerou uma consulta mais ou menos assimSELECT DATA,
HORA,
MATRICULA,
EQUIPAMENTO,
SENTIDO (ENTRADA OU SAIDA),
FROM TABELA
WHERE DATA = '2016/02/14'
ORDER BY DATA,HORA
Dessa forma odenando por data e hora ou ate inserindo o sentido você tera um rastreio das informações
Não sei se lhe respondi corretamento mas foi mais ou menos o que eu entendiJunior
-
Cirilo,
Utilize a cláusula ORDER BY na implementação da sua consulta.
Esta cláusula irá garantir o ordenamento dos registros pela(s) coluna(s) que você utilizar na definição.
Por gentileza dê uma conferida nos links abaixo:
https://msdn.microsoft.com/pt-br/library/ms188385%28v=sql.120%29.aspx?f=255&MSPPError=-2147217396
https://technet.microsoft.com/pt-br/library/ms188723(v=sql.105).aspx
Felipe Lauffer
MCSA: SQL Server | MCP
[ Blog ] - [ Profile ] - [ Wiki ] - [ Gallery ] - [ LinkedIn ]- Editado FLauffer terça-feira, 16 de fevereiro de 2016 01:34
- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 31 de julho de 2019 11:50
-
Cirilo,
Em qual das suas tabelas existe algum campo que possamos fazer entender como um elemento de ordenação?
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
De acordo com tua tabela:
DATA
MATRICULA
PESSOA
EQUIPAMENTO
ORIGEM
DESTINO
SENTIDO
2014-01-01 05:55:10.000
73
MARIA JOSE DE MELO NASCIMENTO
2
1
2
1
2014-01-01 06:01:50.000
73
MARIA JOSE DE MELO NASCIMENTO
3
2
3
1
2014-01-01 06:17:33.000
73
MARIA JOSE DE MELO NASCIMENTO
3
3
2
2
2014-01-01 11:37:10.000
73
MARIA JOSE DE MELO NASCIMENTO
3
2
3
1
2014-01-01 12:04:01.000
73
MARIA JOSE DE MELO NASCIMENTO
3
3
2
2
2014-01-01 16:34:00.000
73
MARIA JOSE DE MELO NASCIMENTO
3
2
3
1
2014-01-01 16:37:53.000
73
MARIA JOSE DE MELO NASCIMENTO
3
3
2
2
2014-01-01 17:35:09.000
73
MARIA JOSE DE MELO NASCIMENTO
2
2
1
2
Você precisa de uma tabela de referência dizendo qual seria a sequência padrão para um funcionário ou grupo de funcionários, para então comparar com a sequência gravada em banco para os dias de movimentação.
Mas se todos utilizam os mesmos equipamentos e seguem a mesma sequência, com a perspectiva, mas não obrigação, que o funcionário vá 3 vezes ao refeitório, você tem um padrão e baseado nesse padrão, você tem valores constantes.
Digamos que sua tabela se chame MOVIMENTACAO, no dia você sempre terá para cada funcionário os mesmos valores para soma de equipamentos, origem e destino sempre serão iguais, pois se anulam, e o mesmo valor para soma de destinos.
Posso checar se houve um desvio desse padrão através de uma checagem simples:
SELECT SUM(M.EQUIPAMENTO) EQUIPAMENTO, SUM(M.ORIGEM) ORIGEM, SUM(M.DESTINO) DESTINO, SUM(M.SENTIDO) SENTIDO, MATRICULA, CONVERT(VARCHAR, DATA, 112) DATA FROM MOVIMENTACAO M GROUP BY M.MATRICULA, CONVERT(VARCHAR, DATA, 112) HAVING SUM(M.EQUIPAMENTO) - SUM(SENTIDO) NOT IN (10, 7, 4, 1) OR SUM(M.ORIGEM) <> SUM(M.DESTINO)
Att,
Antero Marques
- Sugerido como Resposta Junior Galvão - MVPMVP quinta-feira, 18 de fevereiro de 2016 17:53
- Editado Antero Marques quinta-feira, 18 de fevereiro de 2016 20:32
-
-
Bom dia, Segue abaixo a minha tabela CREATE TABLE [dbo].[LOG_ACESSO]( [CD_LOG_ACESSO] [numeric](20, 0) IDENTITY(1,1) NOT NULL, [NU_CREDENCIAL] [numeric](20, 0) NULL, [TP_AUTENTICACAO] [numeric](1, 0) NULL, [NU_MATRICULA] [numeric](18, 0) NULL, [NM_PESSOA] [varchar](150) NULL, [CD_VISITANTE] [numeric](10, 0) NULL, [CD_GRUPO_PESSOA] [numeric](4, 0) NULL, [CD_ESTRUTURA] [numeric](10, 0) NULL, [NM_ESTRUTURA] [varchar](100) NULL, [CD_GRUPO] [numeric](5, 0) NULL, [DS_GRUPO] [varchar](30) NULL, [CD_AREA_ORIGEM] [numeric](4, 0) NULL, [DS_AREA_ORIGEM] [varchar](30) NULL, [CD_AREA_DESTINO] [numeric](4, 0) NULL, [DS_AREA_DESTINO] [varchar](30) NULL, [CD_EQUIPAMENTO] [numeric](6, 0) NULL, [DS_EQUIPAMENTO] [varchar](50) NULL, [NU_EQUIPAMENTO] [numeric](5, 0) NULL, [NU_FUNCAO] [numeric](2, 0) NOT NULL, [TP_EVENTO] [numeric](3, 0) NULL, [TP_SENTIDO_CONSULTA] [numeric](1, 0) NULL, [DT_REQUISICAO] [datetime] NOT NULL, [NU_DATA_REQUISICAO] [numeric](8, 0) NOT NULL, [NU_HORA_REQUISICAO] [numeric](4, 0) NOT NULL, [DT_PERSISTENCIA] [datetime] NOT NULL, [CD_TIPO_CREDENCIAL] [numeric](3, 0) NULL, [NU_PIS] [varchar](25) NULL, [TX_CAMPO01] [varchar](50) NULL, [TX_CAMPO02] [varchar](50) NULL, [TX_CAMPO03] [varchar](50) NULL, [TX_CAMPO04] [varchar](50) NULL, [TX_CAMPO05] [varchar](50) NULL, [TX_CAMPO06] [varchar](50) NULL, [TX_CAMPO07] [varchar](50) NULL, [TX_CAMPO08] [varchar](50) NULL, [TX_CAMPO09] [varchar](50) NULL, [TX_CAMPO10] [varchar](50) NULL, [DS_NSR] [varchar](25) NULL, [DS_SITUACAO_MULTIPLA] [varchar](2000) NULL, [NU_MATRICULA_AUTORIZADOR] [numeric](18, 0) NULL, [NM_PESSOA_AUTORIZADOR] [varchar](150) NULL, CONSTRAINT [PK_LOG_ACESSO] PRIMARY KEY CLUSTERED ( [CD_LOG_ACESSO] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO ALTER TABLE [dbo].[LOG_ACESSO] WITH CHECK ADD CONSTRAINT [CK_LOG_ACESSO_TP_AUTENTICACAO] CHECK (([TP_AUTENTICACAO]=(3) OR [TP_AUTENTICACAO]=(2) OR [TP_AUTENTICACAO]=(1))) GO ALTER TABLE [dbo].[LOG_ACESSO] CHECK CONSTRAINT [CK_LOG_ACESSO_TP_AUTENTICACAO] GO ALTER TABLE [dbo].[LOG_ACESSO] WITH CHECK ADD CONSTRAINT [CK_LOG_ACESSO_TP_SENTIDO_CONS] CHECK (([TP_SENTIDO_CONSULTA]=(3) OR [TP_SENTIDO_CONSULTA]=(2) OR [TP_SENTIDO_CONSULTA]=(1))) GO ALTER TABLE [dbo].[LOG_ACESSO] CHECK CONSTRAINT [CK_LOG_ACESSO_TP_SENTIDO_CONS] GO
-