Como retornar em uma consulta no MySQL o penultimo registro a partir de uma data?
06/08/2015
0
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
Post mais votado
17/08/2015
Gisely Santos
Mais Posts
06/08/2015
Fernando C
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).
06/08/2015
Gisely Santos
06/08/2015
Gisely Santos
07/08/2015
Gisely Santos
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... -.-
07/08/2015
Jothaz
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?
07/08/2015
Gisely Santos
Se puder me explicar como eu poderia fazer isso, agradeço.
10/08/2015
Gisely Santos
No aguardo....
16/03/2018
Wender Rodrigo
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
Clique aqui para fazer login e interagir na Comunidade :)