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

MySQL

06/08/2015

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

Curtidas 0

Melhor post

Gisely Santos

Gisely Santos

17/08/2015

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

Mais Respostas

Fernando C

Fernando C

06/08/2015

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).
GOSTEI 0
Gisely Santos

Gisely Santos

06/08/2015

Sim, ja tentei usando limit... mas não retorna nada...
GOSTEI 0
Gisely Santos

Gisely Santos

06/08/2015

Sim, ja tentei usando limit... mas não retorna nada...
GOSTEI 0
Fernando C

Fernando C

06/08/2015

mas tirou o max?
GOSTEI 0
Gisely Santos

Gisely Santos

06/08/2015

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... -.-
GOSTEI 0
Jothaz

Jothaz

06/08/2015

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?
GOSTEI 0
Gisely Santos

Gisely Santos

06/08/2015

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.
GOSTEI 0
Randrade

Randrade

06/08/2015

Gisely, você quer apenas retornar a penúltima linha?
GOSTEI 0
Gisely Santos

Gisely Santos

06/08/2015

Isso.. apenas a penultima de cada documento
GOSTEI 0
Gisely Santos

Gisely Santos

06/08/2015

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

No aguardo....
GOSTEI 0
Wender Rodrigo

Wender Rodrigo

06/08/2015

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
GOSTEI 0
POSTAR