¿Cómo seleccionar la segunda línea del top 2 o algo similar?

Quiero ejecutar 2 commands separados para devolverme un valor de mi tabla.

el primero podría ser el top 1, porque es la primera línea, no hay problema …

pero ¿cómo puedo hacer algo como top 2, pero solo mostrando la segunda línea?

¿Hay una manera simple de hacerlo? Como una simple selección?

1 línea

seleccionar top 1 Código de Productos order por LastUpdate desc

No existe una solución genérica para este problema, hasta donde yo sé, diferentes DBMS tienen una forma diferente de lograr esto.

En Microsoft SQL Server, puede usar la cláusula ROW_NUMBER:

SELECT code FROM (SELECT TOP 2 code, Row_Number() OVER (ORDER BY lastupdate) AS rownum FROM Products) AS tbl WHERE rownum = 2; 

Oracle tiene una pseudocolumna similar, llamada ROWNUM. Sin embargo, la advertencia aquí es que este valor se calcula antes de que el order entre en juego. Por lo tanto, tendría que, una vez más, usar una subconsulta:

 SELECT code FROM (SELECT code, ROWNUM rnum FROM (SELECT code FROM Products ORDER BY lastupdate) WHERE ROWNUM <= 2) WHERE rnum = 2 

Tenga en count que aquí no se puede hacer una simple ROWNUM = 2 , porque nunca se satisfaría: ROWNUM tiene en count el número de filas realmente devueltas , por lo que si nunca hubo una primera fila devuelta, ROWNUM nunca alcanzará el valor '2' , por lo tanto, nunca satisfará la condición.

En MySQL, esto es aún más simple:

 SELECT code FROM Products ORDER BY lastupdate LIMIT 2, 1 

(No estoy familiarizado con MySQL, por lo que no estoy seguro de si el LIMIT se calculará antes o después de la cláusula ORDER BY; sería genial si alguien más pudiera confirmarlo).

Otros DBMS lo hacen de una manera incluso diferente.

Para mí en MS-SQL, esto es más simple de recordar:

Seleccionar top N filas orderar desc como una "tabla" y luego seleccionar la order top 1 asc

 SELECT TOP 1 code FROM (SELECT TOP 2 code, lastupdate FROM Products ORDER BY lastupdate DESC) AS tblTempQuery ORDER BY lastupdate ASC 

SELECCIONE A.CName FROM (SELECCIONE cname de Tname ORDER BY cname desc FETCH FIRST 2 ROWS SOLAMENTE) Como una order de A.cname solo busca 1 fila;

donde CNAME = columna a la que desea hacer reference, Tname = nombre de tabla desde la cual desea extraer. aquí puede replace el valor de 2 con la fila que desea search.