Como retornar em uma consulta no MySQL o penultimo registro a partir de uma data?

06/08/2015

0

Boa Tarde gente!

Estou com uma certa dificuldade de conseguir retornar a penúltima linha em uma consulta. Eu consegui (depois de um tempo tentando) retornar a ultima linha. O código que utilizei é o abaixo. Gostaria da ajuda de vocês para a partir desta query, conseguir o penúltimo registro.

SELECT
count(c.cod_atividade) as chave,
c.*
from (
        SELECT
        DISTINCT(documento_associado) as documento,
        max(data_encerramento) AS data_encerramento,
        cod_atividade,
        data_abertura_os,
        terminal,
        situacao,
        id_filial,
        uf,
        concat( matricula_vendedor, ' - ' , nome) as vendedor,
        cod_encerramento
        FROM tbl_ordem_servico 
        WHERE produto in('".$produto."')
        and dt_referencia BETWEEN '".$periodo_ini."' AND '".$periodo_fim."'
        and uf = '".$uf_filial."'
        GROUP BY documento,fim_execucao
        ORDER BY data_encerramento DESC LIMIT 2) as c
INNER JOIN tbl_uf AS uf ON id_filial = uf.id
WHERE
SUBSTR(documento,1,2) = uf.uf
group by documento
having chave = 3


Deixa eu explicar uma coisa... preciso agrupar com o having, pois é o seguinte: Um numero de 'documento_associado' pode ter mais de um 'cod_atividade', e como na minha pagina (php) ele mostra em uma tabela separado por 'produto' e pela 'chave'( a quantidade de cod_atividade que determinado documento_associado possui), preciso manter essa estrutura, pois essa consulta que preciso de ajuda é a pagina de detalhamento. Outra coisa, preciso agrupar pelo campo tipo datetime data_encerramento, pois é pela data que eu consigo ver qual o ultimo e o penultimo registro. Com o max(data_encerramento) eu consegui trazer a ultima linha, se souberem de alguma forma de subtrair uma linha desse max(data_encerramento), pois acho que seria mais ou menos por esse caminho... só não consegui fazer isso ainda... Se precisarem de mais algum esclarecimento, estou a disposição!

Desde já agradeço a ajuda... :)
Gisely Santos

Gisely Santos

Responder

Post mais votado

17/08/2015

bom dia gente... ainda não consegui fazer essa consulta... se mais alguém tiver alguma sugestão, agradeço...

Gisely Santos

Gisely Santos
Responder

Mais Posts

06/08/2015

Fernando C

se não me engano, a cláusula limit admite 2 argumentos:
o 1º serão as linhas que serão excluidas (se for o caso); o 2º é o total de registros a serem retornados.
ex no seu caso: limit(1, XX) (XX é o total de linhas a serem retornadas).
teste ou qualquer coisa pesquise sobre o comando LIMIT (no momento estou no "trampo", fico devendo).
ah, sobre o max: infelizmente não adianta, por definição esse comando só retorna um registro mesmo (o maior segundo 1 determinado critério).
Responder

06/08/2015

Gisely Santos

Sim, ja tentei usando limit... mas não retorna nada...
Responder

06/08/2015

Gisely Santos

Sim, ja tentei usando limit... mas não retorna nada...
Responder

06/08/2015

Fernando C

mas tirou o max?
Responder

07/08/2015

Gisely Santos

Bom dia.
Sim, tentei sem o max.. O problema é que, a consulta deve retornar mais de um registro porem preciso da penultima maior data de cada um desses registros...
E sem max apenas com o limit, ele esta me retornando apenas um registro (sendo que deveria trazer 8 documentos distintos com o penultimo registro de cada um deles)...

se tiver mais alguma sugestão...

*continuo tentando... -.-
Responder

07/08/2015

Jothaz

Bom dia.
Sim, tentei sem o max.. O problema é que, a consulta deve retornar mais de um registro porem preciso da penultima maior data de cada um desses registros...
E sem max apenas com o limit, ele esta me retornando apenas um registro (sendo que deveria trazer 8 documentos distintos com o penultimo registro de cada um deles)...

se tiver mais alguma sugestão...

*continuo tentando... -.-


Você já cogitou recuperar isto pela aplicação?
Responder

07/08/2015

Gisely Santos

Pode ser que dê certo... mas não sei como fazer. Sou iniciante em php... Já desenvolvi algumas paginas, mas como não tenho muito conhecimento em php acabo demorando um bom tempo pra finalizar...

Se puder me explicar como eu poderia fazer isso, agradeço.
Responder

07/08/2015

Randrade

Gisely, você quer apenas retornar a penúltima linha?
Responder

07/08/2015

Gisely Santos

Isso.. apenas a penultima de cada documento
Responder

10/08/2015

Gisely Santos

E então... mais alguém??? ainda continuo tentando realizar essa consulta...

No aguardo....
Responder

16/03/2018

Wender Rodrigo

SELECT
count(c.cod_atividade) as chave,
c.*
from (
SELECT
DISTINCT(documento_associado) as documento,
max(data_encerramento) AS data_encerramento,
cod_atividade,
data_abertura_os,
terminal,
situacao,
id_filial,
uf,
concat( matricula_vendedor, ' - ' , nome) as vendedor,
cod_encerramento
FROM tbl_ordem_servico
WHERE produto in('".$produto."')
and dt_referencia BETWEEN '".$periodo_ini."' AND '".$periodo_fim."'
and uf = '".$uf_filial."'
GROUP BY documento,fim_execucao
ORDER BY data_encerramento DESC LIMIT 1,1) as c
INNER JOIN tbl_uf AS uf ON id_filial = uf.id
WHERE
SUBSTR(documento,1,2) = uf.uf
group by documento
having chave = 3
Responder

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

Aceitar