Como retornar em uma consulta no MySQL o penultimo registro a partir de uma data?
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.
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... :)
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
Curtidas 0
Melhor post
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
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).
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
06/08/2015
Sim, ja tentei usando limit... mas não retorna nada...
GOSTEI 0
Gisely Santos
06/08/2015
Sim, ja tentei usando limit... mas não retorna nada...
GOSTEI 0
Fernando C
06/08/2015
mas tirou o max?
GOSTEI 0
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... -.-
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
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... -.-
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
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.
Se puder me explicar como eu poderia fazer isso, agradeço.
GOSTEI 0
Randrade
06/08/2015
Gisely, você quer apenas retornar a penúltima linha?
GOSTEI 0
Gisely Santos
06/08/2015
Isso.. apenas a penultima de cada documento
GOSTEI 0
Gisely Santos
06/08/2015
E então... mais alguém??? ainda continuo tentando realizar essa consulta...
No aguardo....
No aguardo....
GOSTEI 0
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
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