Ir al contenido



Foto

En una consulta obtener una fila y la siguiente fila


  • Por favor identifícate para responder
14 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.139 mensajes
  • LocationRepública Dominicana

Escrito 15 noviembre 2014 - 08:59

Hola a todos, estoy medio obsoleto en esos asuntos, quisiera que en una consulta obtener dos campos, una de la primera fila y la otra la siguiente fila, algo como esto:



sql
  1. SELECT pulgada, (siguiente fila de pulgada) AS pulgada2 FROM medidas



Saludos.
  • 0

#2 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.133 mensajes

Escrito 15 noviembre 2014 - 09:54

Hola Fernando, primero que todo en que DB?:

Luego me queda la duda de si tu consulta traerá  únicamente 2 registros, si es así entonces  sería:


sql
  1. //firebird
  2. SELECT pulgada FROM medidas
  3. ORDER BY tu_campo ROWS 2
  4.  
  5. //MySql
  6. SELECT pulgada FROM medidas ORDER BY tu_campo LIMIT 0,2


Si lo que buscas es que devuelva más de dos registros, con un campo adicional que corresponda al registro siguiente, entonces avisa para implementarlo.

Saludos.
  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.139 mensajes
  • LocationRepública Dominicana

Escrito 15 noviembre 2014 - 10:03

Hola Wilson, si te fijas estamos en el foro de Access  :), en fin, no quiero solamente dos registros, sino dos campos, el campo original con un registro y otro campo con el registro siguiente del campo original.

Saludos.
  • 0

#4 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.133 mensajes

Escrito 15 noviembre 2014 - 10:10

Hola Wilson, si te fijas estamos en el foro de Access  :)


La edad me pasa factura de vez en cuando. :D :D :D

En cuanto a la consulta, voy a probar y te aviso.

Saludos.
  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.139 mensajes
  • LocationRepública Dominicana

Escrito 15 noviembre 2014 - 10:19

Para ponerlo aún más claro, en el primer hilo coloqué una consulta ejemplo, yo tengo la tabla así:

Pulgada
1
2
3
4
5

ahora con la consulta debería ser así:

[table]
[tr]
[td]Pulgada[/td]
[td]Pulgada2[/td]
[/tr]
[tr]
[td]1[/td]
[td]2[/td]
[/tr]
[tr]
[td]2[/td]
[td]3[/td]
[/tr]
[tr]
[td]3[/td]
[td]4[/td]
[/tr]
[tr]
[td]4[/td]
[td]5[/td]
[/tr]
[tr]
[td]5[/td]
[td]6[/td]
[/tr]
[/table]

Saludos.
  • 0

#6 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.133 mensajes

Escrito 15 noviembre 2014 - 11:18

Asumiendo que tienes un campo único ID en la tabla medidas, esta consulta te funciona perfectamente:


sql
  1. SELECT M.ID, M.PULGADAS,
  2. (SELECT FIRST(M2.PULGADAS) AS PULGADAS2 FROM MEDIDAS M2 WHERE M2.ID >M.ID)
  3. FROM MEDIDAS M


Saludos
  • 0

#7 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 748 mensajes
  • LocationArgentina

Escrito 15 noviembre 2014 - 11:47

Yo hice esto en SQL Server 2005


sql
  1. SELECT A.Pulgada AS Pulgada1, B.Pulgada AS Pulgada2 FROM Medidas A, Medidas B WHERE (B.Id = A.Id + 1)


Supongo que deberia funcionarte en Access, siendo los dos de microsoft
  • 0

#8 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.133 mensajes

Escrito 15 noviembre 2014 - 11:51

OrtuAgustin bienvenido al foro, siéntete en casa, y gracias por tu aporte.

Yo hice esto en SQL Server 2005


SELECT A.Pulgada AS Pulgada1, B.Pulgada as Pulgada2 FROM Medidas A, Medidas B WHERE (B.Id = A.Id + 1)


Supongo que deberia funcionarte en Access, siendo los dos de microsoft


Tu consulta no funcionaría en el caso de que el campo ID tuviera huecos, que es algo muy normal con los campos autoincrementales.

Saludos.
  • 0

#9 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 748 mensajes
  • LocationArgentina

Escrito 15 noviembre 2014 - 12:05

Tenes razon compañero Wilson (y) (y) a ver si se me ocurre otra manera
  • 0

#10 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 18 noviembre 2014 - 02:14

Yo uso un segundo select en FireBird como este, en Access, tendras que probar a ver:


sql
  1. SELECT
  2.   A.Pulgada AS Pulgada1,
  3.   (SELECT FIRST 1 B.Pulgada FROM Medidas B WHERE B.Id > A.Id) AS Pulgada2
  4. FROM Medidas A


Esto no tiene problemas con los huecos, de hecho yo lo uso para detectar huecos en numeraciones con un simple WHERE adicional:


sql
  1. SELECT
  2.   A.Pulgada AS Pulgada1,
  3.   (SELECT FIRST 1 B.Pulgada FROM Medidas B WHERE B.Id > A.Id) AS Pulgada2
  4. FROM Medidas A
  5. WHERE (B.Id > A.Id+1)


Asi obtienes una lista de huecos, al estilo:

1, 5
7, 12

Del 1 salta al 5, del 7 al 12...
  • 0

#11 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.133 mensajes

Escrito 18 noviembre 2014 - 07:25


Yo uso un segundo select en FireBird como este, en Access, tendras que probar a ver:


Sergio, si funciona en Access, es casi lo mismo que yo había propuesto en un post anterior.

Saludos.
  • 0

#12 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 18 noviembre 2014 - 02:25



Yo uso un segundo select en FireBird como este, en Access, tendras que probar a ver:


Sergio, si funciona en Access, es casi lo mismo que yo había propuesto en un post anterior.

Saludos.


El sistema que proponias tenia un fallo, suponias que no habian huecos en la numeracion de ids, porque usas que B tiene un id igual  a A.Id+1.

Si borras el elemento con Id = 8, la linea del 7 saldría (que no sale) sin mostrar los datos del Id = 9, por eso necesitas un segundo select bastante diferente, con el "FIRST 1" (eso no se si lo tiene access, por ejemplo) y usar (B.Id>A.Id), para no eliminar el 7 por haber borrado antes el 8.
  • 0

#13 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.133 mensajes

Escrito 18 noviembre 2014 - 03:42




Yo uso un segundo select en FireBird como este, en Access, tendras que probar a ver:


Sergio, si funciona en Access, es casi lo mismo que yo había propuesto en un post anterior.

Saludos.


El sistema que proponias tenia un fallo, suponias que no habian huecos en la numeracion de ids, porque usas que B tiene un id igual  a A.Id+1.

Si borras el elemento con Id = 8, la linea del 7 saldría (que no sale) sin mostrar los datos del Id = 9, por eso necesitas un segundo select bastante diferente, con el "FIRST 1" (eso no se si lo tiene access, por ejemplo) y usar (B.Id>A.Id), para no eliminar el 7 por haber borrado antes el 8.


El post al que te refieres no es mio,  el mio está más arriba, :D :D :D, yo también había notado el fallo y se lo había hecho saber al compañero que posteó.

Un abrazo.
  • 0

#14 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 20 noviembre 2014 - 01:45





Yo uso un segundo select en FireBird como este, en Access, tendras que probar a ver:


Sergio, si funciona en Access, es casi lo mismo que yo había propuesto en un post anterior.

Saludos.


El sistema que proponias tenia un fallo, suponias que no habian huecos en la numeracion de ids, porque usas que B tiene un id igual  a A.Id+1.

Si borras el elemento con Id = 8, la linea del 7 saldría (que no sale) sin mostrar los datos del Id = 9, por eso necesitas un segundo select bastante diferente, con el "FIRST 1" (eso no se si lo tiene access, por ejemplo) y usar (B.Id>A.Id), para no eliminar el 7 por haber borrado antes el 8.


El post al que te refieres no es mio,  el mio está más arriba, :D :D :D, yo también había notado el fallo y se lo había hecho saber al compañero que posteó.

Un abrazo.


Ops! Es cierto, proponias lo mismo... es que soy de respuesta rapida! Sorry...
  • 0

#15 giulichajari

giulichajari

    Advanced Member

  • Miembros
  • PipPipPip
  • 372 mensajes

Escrito 07 abril 2015 - 08:54

Entonces no existe algo como limit en access? esta consulta la escribes en un componente query?


  • 0