Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

OlirumsilvaSilva

Dificuldades com Consulta SQL

Recommended Posts

Olá, é a primeira vez que acesso o Fórum... preciso de uma ajuda com uma consulta SQL

Tenho uma tabela com os seguintes campos...

Hora(time() automático)
Dia(texto - puxa a informação de uma variável no script da data atual)
Mês(texto - puxa a informação de uma variável no script do mês atual)
Ano(texto - puxa a informação de uma variável no script do ano atual)
Nome(texto - puxa dados do user na sessão aberta)
Chamado(texto puxa dados de outra tabela)
Local(texto - é selecionado na hora do registro)

Os chamados são escaneados e registrados no banco de dados em "locais" diferentes e cada processo gera uma nova linha implementada no DB consequentemente geram uma nova hora, dia, mês, ano e Local... isso gera um "histórico" deste chamado.

Eu preciso agora criar uma consulta que me apresente o último registro de cada chamado e o seu local atual... e estou com muitas dificuldades para fazer isso.

Já tentei com DISTINCT, GROUP BY, LAST... mas o que chega mais próximo é o DISTINCT, porém como ele analisa a linha verifica a diferença e acaba repetindo o chamado em outro local.

SELECT DISTINCT nobj_chm, *
FROM db_ender
WHERE Mes = 'Outubro'
ORDER BY id_registro DESC, Dia DESC, Mes DESC

Ele até retorna o último registro dos chamados e o seu ultimo local, porém repete posteriormente... eu queria que a pesquisa realmente só me apresentasse o último registro de cada chamado e o seu local.

Será que alguém poderia me dar uma luz? Sei que pode ser mais simples do que imagino(ou não) mas como disse... sou novato e tenho muitas limitações ainda.

Agradeço desde já a atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se todos seus campos estiverem em uma Unica Tabela, e se for permitido Registros duplicados, acho que será mais difícil pra vc fazer isso, pelo que eu pude entender.

 

Se forem tabelas separadas, acho que seu Select final será mais fácil de implementar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É realmente este banco repete os números de chamados pois ele endereça estes itens de acordo com o setor em que está.

 

Tipo...

 

 

Nº.: 10004400451 LOCAL: RECMA DIA 20/OUTUBRO/2014 ÀS 11:48HS. Nº.: 10004400451 LOCAL: PRETRI03 DIA 20/OUTUBRO/2014 ÀS 11:53HS. Nº.: 10004400451 LOCAL: TRIA00 DIA 20/OUTUBRO/2014 ÀS 14:20HS.

 

Com isso não posso bloquear a repetição dos registros.

Não teria uma luz para ajudar este pobre iniciante?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que você precisa bloquear? a repeticao de numero por local?

Eu preciso que a consulta retorne uma lista dos chamados, porém somente os chamados sem repeti-los e com o seu último local(registro)... quando eu tento isso com Distinct ou Max ou até Last... ele compara a linha e repete os chamados(nºs) assim que compara o local.

 

Agradeço a ajuda e atenção desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vc teria alguma data com GETDATE nesta tabela/consulta? Poderia fazer o MAX por este campo.


Uma tentativa de acordo com a estrutura do post #1:

select b.* 
from
(select max(Hora) aHora, Chamado as aChamado from TABELA) a
inner join tabela b on a.aHora = b.Hora
and a.aChamado = b.Chamado

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

você teria alguma data com GETDATE nesta tabela/consulta? Poderia fazer o MAX por este campo.

Uma tentativa de acordo com a estrutura do post #1:

select b.* 
from
(select max(Hora) aHora, Chamado as aChamado from TABELA) a
inner join tabela b on a.aHora = b.Hora
and a.aChamado = b.Chamado

Eu não tenho duas tabelas para comparação... aqui só busco dados de uma tabela exclusiva.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 


Eu não tenho duas tabelas para comparação... aqui só busco dados de uma tabela exclusiva.

Até ai sem problemas.

O que fiz, foi somente um MAX por data para trazer somente o ultimo registro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

vc pode antes recuperar o ultimo registro incluido, vc pode usar o SQL Last()
A função Last() retorna o último valor da coluna selecionada.

SELECT LAST(column_name) FROM table_name

existem alguns tópicos sobre este assunto no forum, da´uma pesquisada...

no SQL SERVER, você pode recuperar essa valor com

SELECT @@IDENTITY

no MySQL vc pode usar o LAST_INSERT_ID()

========

Aqui um exemplo de recuperar o último registro e somar + 1 e inserir no bd
<%@ Language=VBScript %>
<% Option Explicit %>
<%
'conexao teste com mdb
Dim localbd, bd

Set bd = Server.CreateObject("ADODB.Connection")
localbd = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & Server.MapPath("banco.mdb")
bd.Open localbd

Dim sql, rs
Dim cd_pedido

Set rs = Server.CreateObject("ADODB.RecordSet")

if Request.Form("btenvia") = "Gerar Numero" then
'Novo numero
SQL = "SELECT MAX(N_PEDIDO)+1 AS ULITMO_PEDIDO FROM PEDIDO"
Set rs = bd.Execute (sql)
cd_pedido = rs.Fields("ULITMO_PEDIDO").Value

'inserindo novo numero
bd.Execute ("INSERT INTO PEDIDO (N_PEDIDO) VALUES (" & cd_pedido & ")")
rs.Close

end if

'verificando numero
SQL = "SELECT MAX(N_PEDIDO) AS ULITMO_PEDIDO FROM PEDIDO"
Set rs = bd.Execute (sql)
cd_pedido = rs.Fields("ULITMO_PEDIDO").Value


rs.Close
Set rs = Nothing

bd.Close
Set bd = Nothing
%>
<html>
<head>
<title>Numero Sequencial</title>
</head>
<body>
<center>
<form id="frm" action="Numero_Sequencial.asp" method="post">
Numero do ultimo pedio:<%=cd_pedido%><br>
<input type="submit" id="btenvia" name="btenvia" value="Gerar Numero" />
</form>
</center>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.