Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Obtener registro con la penúltima Fecha!!!

Estas en el tema de Obtener registro con la penúltima Fecha!!! en el foro de SQL Server en Foros del Web. Hola!!!... Pues me gustaría saber como podría hacerle en sql para poder elegir la fecha anterior a la ultima fecha de un registro, intente algo ...
  #1 (permalink)  
Antiguo 09/05/2012, 12:41
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 12 años, 7 meses
Puntos: 1
Información Obtener registro con la penúltima Fecha!!!

Hola!!!... Pues me gustaría saber como podría hacerle en sql para poder elegir la fecha anterior a la ultima fecha de un registro, intente algo como esto pero me sigue arrojando la ultima fecha ...

Código SQL:
Ver original
  1. USE extractor;
  2. GO
  3. DECLARE @fecha VARCHAR(50)
  4. SET @fecha =(SELECT MAX(fe_ocupz) FROM b_plazas);
  5. SELECT cl_puest, MAX(fe_ocupz) FROM b_plazas WHERE fe_ocupz < @fecha
  6. AND cl_puest='17345'
  7. GROUP BY
  8. cl_puest
  9. GO
  #2 (permalink)  
Antiguo 09/05/2012, 12:52
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Obtener registro con la penúltima Fecha!!!

Código SQL:
Ver original
  1. CREATE TABLE #fecha
  2. (
  3. fecha datetime
  4. )
  5.  
  6. INSERT INTO #fecha VALUES (getdate())
  7. INSERT INTO #fecha VALUES (getdate()-1)
  8. INSERT INTO #fecha VALUES (getdate()-2)
  9. INSERT INTO #fecha VALUES (getdate()-3)
  10. INSERT INTO #fecha VALUES (getdate()-4)
  11. INSERT INTO #fecha VALUES (getdate()-5)
  12.  
  13. SELECT fecha FROM (
  14. SELECT ROW_NUMBER() OVER(ORDER BY fecha DESC) AS rn, fecha FROM #fecha
  15. ) t1 WHERE rn=2

con eso sacas la fecha penultima :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 09/05/2012, 12:59
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Obtener registro con la penúltima Fecha!!!

Muchas gracias por tu respuesta Libras, hay un problema ya que me arroja un error:

"'row_number' no es un nombre de función reconocido.

Estoy usando el SQL Server 2000, supongo que es por eso... :s... Existe otra manera??...
  #4 (permalink)  
Antiguo 09/05/2012, 17:47
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: Obtener registro con la penúltima Fecha!!!

Existe alguna otra forma de resolverlo sin el uso de subselect en el from ni la funcion row_number??? Parece bastante complejo...
  #5 (permalink)  
Antiguo 09/05/2012, 20:41
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: Obtener registro con la penúltima Fecha!!!

Cita:
Iniciado por stuart_david3 Ver Mensaje
Muchas gracias por tu respuesta Libras, hay un problema ya que me arroja un error:

"'row_number' no es un nombre de función reconocido.

Estoy usando el SQL Server 2000, supongo que es por eso... :s... Existe otra manera??...
Que tal stuart, probaste resolverlo con cursores?

Yo definiria un cursor que recorra el resultado del select anterior que posteaste ordenado descendente y me quedo con la segunda fila (penultima fecha)

Espero haya sido de ayuda

Saludos
  #6 (permalink)  
Antiguo 10/05/2012, 11:24
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Obtener registro con la penúltima Fecha!!!

Cita:
Iniciado por damimg Ver Mensaje
Que tal stuart, probaste resolverlo con cursores?

Yo definiria un cursor que recorra el resultado del select anterior que posteaste ordenado descendente y me quedo con la segunda fila (penultima fecha)

Espero haya sido de ayuda

Saludos
cursores?? nop te recomiendo eso porque le quita mucho performance a la base de datos, en dado caso se puede hacer con un having count :P, saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 10/05/2012, 11:31
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Obtener registro con la penúltima Fecha!!!

Con el ejemplo que puso el master LIBRAS, no seria algo como esto:


select top 1 * from #fecha where fecha < (select max(fecha) from #fecha)
__________________
MCTS Isaias Islas
  #8 (permalink)  
Antiguo 10/05/2012, 12:54
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: Obtener registro con la penúltima Fecha!!!

Cita:
Iniciado por iislas Ver Mensaje
Con el ejemplo que puso el master LIBRAS, no seria algo como esto:


select top 1 * from #fecha where fecha < (select max(fecha) from #fecha)
isslas pero la consulta que planteas no devuelve la penultima fecha, sino la primer fecha que encuentra en el registro menor a la ultima... pero no precisamente la penultima
  #9 (permalink)  
Antiguo 10/05/2012, 12:55
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: Obtener registro con la penúltima Fecha!!!

Cita:
Iniciado por Libras Ver Mensaje
cursores?? nop te recomiendo eso porque le quita mucho performance a la base de datos, en dado caso se puede hacer con un having count :P, saludos!
Libras podrias resolverlo con un having y count como decis? gracias
  #10 (permalink)  
Antiguo 10/05/2012, 16:42
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: Obtener registro con la penúltima Fecha!!!

Cita:
Iniciado por stuart_david3 Ver Mensaje
Muchas gracias por tu respuesta Libras, hay un problema ya que me arroja un error:

"'row_number' no es un nombre de función reconocido.

Estoy usando el SQL Server 2000, supongo que es por eso... :s... Existe otra manera??...
Stuart te aporto una forma de resolverlo:

Código SQL:
Ver original
  1. CREATE TABLE tempfecha (
  2.  
  3.    fecha datetime
  4. )
  5.  
  6. INSERT INTO tempfecha SELECT top 2 * FROM fechas ORDER BY fecha DESC
  7.  
  8. SELECT top 1 fecha
  9. FROM tempfecha
  10. ORDER BY fecha
  11.  
  12. DROP TABLE tempfecha

Saludos!
  #11 (permalink)  
Antiguo 11/05/2012, 10:13
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Obtener registro con la penúltima Fecha!!!

damming

"sino la primer fecha que encuentra en el registro menor a la ultima"

¿Que seria para ti la PENULTIMA?

Segun la Real Lengua de la Academia Española

penúltimo,ma

adj. Inmediatamente anterior al último. También s.:
llegó el penúltimo.
__________________
MCTS Isaias Islas
  #12 (permalink)  
Antiguo 11/05/2012, 12:13
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: Obtener registro con la penúltima Fecha!!!

Cita:
Iniciado por iislas Ver Mensaje
damming

"sino la primer fecha que encuentra en el registro menor a la ultima"

¿Que seria para ti la PENULTIMA?

Segun la Real Lengua de la Academia Española

penúltimo,ma

adj. Inmediatamente anterior al último. También s.:
llegó el penúltimo.
Que tal iislas, te pongo un ejemplo para que quede mas claro que quiero decir:

Fechas

14/01/12
01/04/12
08/04/12

La penúltima fecha, en tal caso, es 01/04/12 (la anterior a la última).

Me referí a que tu consulta no devuelve realmente lo que se espera.

Saludos
  #13 (permalink)  
Antiguo 11/05/2012, 12:47
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Obtener registro con la penúltima Fecha!!!

Hola, gracias a todos por sus respuestas iislas como dijo damimg esta consulta pues practicamente me devuelve la fecha menor:

Código SQL:
Ver original
  1. SELECT top 1 * FROM b_plazas WHERE fe_ocupz < (SELECT MAX(fe_ocupz) FROM b_plazas)
  2. AND cl_puest='17345'

Libras ¿Cómo le haría con un having conunt? Lo intentaré de todos modos pero ja no se como empezar xD...

daming Gracias, tu consulta me devuelve exactamente la penúltima fecha que necesito, y bueno me la muestra en una tabla temporal

Código SQL:
Ver original
  1. CREATE TABLE tempfecha (
  2.  
  3.    fecha datetime
  4. )
  5.  
  6. INSERT INTO tempfecha SELECT top 2 fe_ocupz FROM b_plazas WHERE cl_puest='17345' ORDER BY fe_ocupz DESC
  7.  
  8. SELECT top 1 fecha
  9. FROM tempfecha
  10. ORDER BY fecha
  11.  
  12. DROP TABLE tempfecha

Ahora aquí viene la sabrosura del asunto:

Tengo una consulta algo grande en la cual debo de poner la fecha penultima del contrato de un trabajador (por eso que ocupaba esto) la cual extraigo de una de las tantas tablas de las que extraigo la información de nombre b_plazas, como podría hacer para mostrar los datos de esta consulta ya que no es solo la penúltima fecha de toda la tabla si no más bien la de todos los trabajadores, seguiré intentando pero si alguien me pudiera ayudar (más de lo que ya han hecho) les agradecería bastante, eh pensado en algo como esto:

Código SQL:
Ver original
  1. CREATE TABLE tempfecha (
  2.  
  3.    fecha datetime
  4. )
  5.  
  6. INSERT INTO tempfecha SELECT <----AQUI TODA MI CONSULTOTA----> ORDER BY fe_ocupz DESC
  7.  
  8. SELECT top 1 fecha
  9. FROM tempfecha
  10. ORDER BY fecha
  11.  
  12. DROP TABLE tempfecha

Muchas gracias damimg, iislas y Libras han sido de bastante ayuda.
  #14 (permalink)  
Antiguo 11/05/2012, 13:21
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: Obtener registro con la penúltima Fecha!!!

Stuart, cuando hablas de poner la fecha penultima del contrato de un trabajador te referis a insertar ese dato en una tabla o solo mostrarlo por pantalla? No me queda claro que es lo que tenes que hacer
  #15 (permalink)  
Antiguo 11/05/2012, 13:42
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Obtener registro con la penúltima Fecha!!!

Solo mostrarlo!!!... Ya que manejo más adelante tengo que mostrar los resultados en un reporte... Sin tener que insertar datos en la tabla...
  #16 (permalink)  
Antiguo 11/05/2012, 13:59
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: Obtener registro con la penúltima Fecha!!!

Cita:
Iniciado por stuart_david3 Ver Mensaje
Solo mostrarlo!!!... Ya que manejo más adelante tengo que mostrar los resultados en un reporte... Sin tener que insertar datos en la tabla...
Stuart lo que deberias hacer es redefinir las columnas de la tabla temporal con el tipo de dato que vas a insertar en ella, ya que a modo de ejemplo, se definió de una sola columna.


Y como bien decis, debes agregar lo que necesita dentro del insert y reemplazar la columna del ultimo select (que recorre la tabla temporal) por un * o los campos que necesitas mostrar.

Espero te haya sido de ayuda.

Saludos

damimg
  #17 (permalink)  
Antiguo 11/05/2012, 14:03
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Obtener registro con la penúltima Fecha!!!

Ok, lo intentaré y te platico como me fue, muchas gracias damimg...

Saludos!...
  #18 (permalink)  
Antiguo 11/05/2012, 14:08
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: Obtener registro con la penúltima Fecha!!!

Cita:
Iniciado por stuart_david3 Ver Mensaje
Ok, lo intentaré y te platico como me fue, muchas gracias damimg...

Saludos!...
Ok Stuart, saludos
  #19 (permalink)  
Antiguo 11/05/2012, 14:16
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Obtener registro con la penúltima Fecha!!!

¿Y si le hacemos un ORDER BY fecha DESC?

create table #fechas (fecha datetime)
insert #fechas values('2012-01-14')
insert #fechas values('2012-04-01')
insert #fechas values('2012-04-08')


select top 1 fecha from #fechas where fecha < (select Max(fecha) from #fechas)
order by fecha desc

-------------------------------------
2012-04-01 00:00:00.000
__________________
MCTS Isaias Islas
  #20 (permalink)  
Antiguo 11/05/2012, 16:08
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: Obtener registro con la penúltima Fecha!!!

Cita:
Iniciado por iislas Ver Mensaje
¿Y si le hacemos un ORDER BY fecha DESC?

create table #fechas (fecha datetime)
insert #fechas values('2012-01-14')
insert #fechas values('2012-04-01')
insert #fechas values('2012-04-08')


select top 1 fecha from #fechas where fecha < (select Max(fecha) from #fechas)
order by fecha desc

-------------------------------------
2012-04-01 00:00:00.000

iislas tu solucion es muy buena y funciona, pero queria preguntarte si el ordenamiento se aplica primero y luego se realiza la comparacion del where... tengo esa duda, es decir, en el where ya se van filtrando las fechas ordenadas en forma descendente o el ordenamiento es al final del filtrado???
  #21 (permalink)  
Antiguo 14/05/2012, 12:07
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Obtener registro con la penúltima Fecha!!!

¿?........el ordenamiento se hace de forma inmediata en el SELECT.
__________________
MCTS Isaias Islas

Etiquetas: registro, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:21.