Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

426
Visualizações
¿Cómo puedo seleccionar las penúltimas filas en una tabla mysql, agrupadas por columna?

La estructura es:

 CREATE TABLE current ( id BIGINT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), symbol VARCHAR(5), UNIQUE (id), INDEX (symbol) ) ENGINE MyISAM;
identificación símbolo
1 A
2 B
3 C
4 C
5 B
6 A
7 C
8 C
9 A
10 B

estoy usando lo siguiente

 SELECT * FROM current WHERE id IN ( SELECT MAX(id) FROM current GROUP BY symbol )

para devolver los últimos registros de una tabla.

identificación símbolo
8 C
9 A
10 B

¿Cómo puedo devolver los penúltimos resultados de manera similar?

se que necesito

 ORDER BY id DESC LIMIT 1,1

en algún lugar, pero mi foo es débil.

yo quisiera volver

identificación símbolo
5 B
6 A
7 C
over 4 years ago · Santiago Trujillo
4 Respostas
Responde à pergunta

0

SELECT * FROM current WHERE id IN ( SELECT DISTINCT T.id FROM current AS T WHERE id=( SELECT id FROM current WHERE symbol=T.symbol ORDER BY id DESC LIMIT 1,1 ) )
over 4 years ago · Santiago Trujillo Relatório

0

Fácil si su MySql puede usar ROW_NUMBER. (MySql 8)
Solo hazlo descender, luego toma el segundo.

 WITH CTE AS ( SELECT * , ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY id DESC) AS symbol_rn FROM current ) SELECT id, symbol FROM CTE WHERE symbol_rn = 2 ORDER BY id;

En MySql 7.5 puede simplemente unirse en el símbolo y agrupar por.
Luego, el penúltimo tendrá 1 ID más alto.

 SELECT c1.id, c1.symbol FROM current c1 LEFT JOIN current c2 ON c2.symbol = c1.symbol AND c2.id >= c1.id GROUP BY c1.id, c1.symbol HAVING COUNT(c2.id) = 2 ORDER BY c1.id; 
identificación símbolo
5 B
6 A
7 C

db<>violín aquí

El rendimiento realmente se beneficiará de un índice en el símbolo.

over 4 years ago · Santiago Trujillo Relatório

0

Para versiones de MySql anteriores a la 8.0, use una subconsulta en la cláusula WHERE para filtrar la id máxima de cada símbolo y luego agregue:

 SELECT MAX(id) id, symbol FROM current WHERE id NOT IN (SELECT MAX(id) FROM current GROUP BY symbol) GROUP BY symbol ORDER BY id;

Ver la demostración .

over 4 years ago · Santiago Trujillo Relatório

0

Puedes probar esto;

 SELECT * FROM current WHERE id IN (SELECT MAX(id) FROM current GROUP BY symbol) ORDER BY id DESC LIMIT 1,3

límite 1,3 dice; obtener los últimos 3 resultados excluyendo el último resultado. Puedes cambiar los números.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda