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

Condición para que se muestren registros por fecha

Estas en el tema de Condición para que se muestren registros por fecha en el foro de SQL Server en Foros del Web. Hola! Tengo una tabla donde se registran las tarifas de precios de los artículos indicando a partir de la fecha en la que entra en ...
  #1 (permalink)  
Antiguo 23/09/2010, 10:08
LHG
 
Fecha de Ingreso: febrero-2010
Mensajes: 6
Antigüedad: 14 años, 1 mes
Puntos: 0
Condición para que se muestren registros por fecha

Hola!

Tengo una tabla donde se registran las tarifas de precios de los artículos indicando a partir de la fecha en la que entra en vigor por el campo "ValidFrom". Quiere hacer una vista donde se muestren las últimos precios vigentes a una fecha en concreto. Ejemplo

ItemCode Price ValidFrom
Articulo 1 100,00 € 2010-04-01
Articulo 1 120,00 2010-06-01

SI hago la vista a fecha de hoy, solo me debería mostrar el último registro, que por fechas invalida al primero.

No como tengo que indicar en el where para que solo me muestre dicho registro.......

Muchas gracias por vuestra ayuda!!!!!
  #2 (permalink)  
Antiguo 23/09/2010, 10:32
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 7 meses
Puntos: 39
Respuesta: Condición para que se muestren registros por fecha

Puede ser asi:
Código SQL:
Ver original
  1. SELECT T1.*
  2. FROM tabla T1
  3. INNER JOIN (
  4.     SELECT ItemCode, MAX(ValidFrom) ValidFrom
  5.     FROM tabla
  6.     GROUP BY ItemCode
  7. ) T2 ON T1.ItemCode = T2.ItemCode AND T1.ValidFrom = T2.ValidFrom
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 23/09/2010, 13:22
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 2 meses
Puntos: 447
Respuesta: Condición para que se muestren registros por fecha

Buenas Tardes LHG, no me quedó muy clara tu explicación, pero por el concepto que estás manejando de Vigencia de los precios creo que hay un detalle con la consulta que propone el compañero flaviovich. Esta consulta siempre te estaría regresando el precio que corresponde a la fecha máxima de vigencia pero este precio puede no corresponder al vigente para el día de hoy. Veamos si con algunos datos me puedo explicar mejor (suponiendo que esto es lo que necesitas)

Supongamos que tenemos los siguientes datos en la tabla (el formato de fecha sería yyyy-mm-dd):

Código HTML:
Ver original
  1. ItemCode|Price|ValidFrom
  2. Articulo 1|100,00|2010-09-01
  3. Articulo 1|110,00|2010-09-23
  4. Articulo 1|120,00|2010-09-25

hasta el día 01 el precio vigente sería precisamente el del día 01, entre el día 02 y 23 el precio vigente sería el del 23 y entre el 24 y 25 el precio vigente sería el del 25 correcto?

La consulta que propone flaviovich siempre regresaría el precio del día 25, independientemente de la fecha en que realizas la consulta.

Te propongo que pruebes con lo siguiente:

Código SQL:
Ver original
  1. DECLARE @Fecha datetime
  2. SET @Fecha = '20100924'
  3. SELECT T1.*
  4. FROM TuTabla T1
  5. INNER JOIN (    
  6.         SELECT ItemCode, MIN(ValidFrom) ValidFrom
  7.         FROM TuTabla
  8.         WHERE ValidFrom >= @Fecha    
  9.         GROUP BY ItemCode
  10. ) T2 ON T1.ItemCode = T2.ItemCode AND T1.ValidFrom = T2.ValidFrom

Saludos y espero que te sirva de algo el código.
Leo
  #4 (permalink)  
Antiguo 23/09/2010, 15:02
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 7 meses
Puntos: 39
Respuesta: Condición para que se muestren registros por fecha

leonardo_josue, me parece que estas tomando mal las fechas.
En tu ejemplo, no puedes tomar la fecha 23 si @Fecha = '2010-09-02', porque el 23 es una fecha posterior.
Bueno, LHG tiene la ultima palabra.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #5 (permalink)  
Antiguo 23/09/2010, 16:06
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 2 meses
Puntos: 447
Respuesta: Condición para que se muestren registros por fecha

Cita:
Iniciado por flaviovich Ver Mensaje
leonardo_josue, me parece que estas tomando mal las fechas.
En tu ejemplo, no puedes tomar la fecha 23 si @Fecha = '2010-09-02', porque el 23 es una fecha posterior.
Bueno, LHG tiene la ultima palabra.
Flaviovich: Si lo que comentas es correcto entonces ambos estamos equivocados, ya que con los datos que pongo de ejemplo tu consulta siempre regresaría el precio del día 25, ya que como mencioné en mi post nunca concideras la fecha de consulta. Haciendo la corrección creo que sería más o menos así:

Código SQL:
Ver original
  1. DECLARE @Fecha datetime
  2. SET @Fecha = '20100923'
  3. SELECT T1.*
  4. FROM TuTabla T1
  5. INNER JOIN (    
  6.         SELECT ItemCode, MAX(ValidFrom) ValidFrom
  7.         FROM TuTabla
  8.         WHERE ValidFrom <= @Fecha --Para considerar la fecha de consulta    
  9.         GROUP BY ItemCode
  10. ) T2 ON T1.ItemCode = T2.ItemCode AND T1.ValidFrom = T2.ValidFrom

Con esta consulta y de acuerdo a los datos que pongo de ejemplo entonces del 01 hasta el 22 pondrá el precio del 01, del 23 al 24 pondrá el precio del día 23 y del 25 en adelante pondrá la fecha del 25, pero como dices, LHG es quien tiene la última palabra.

Saludos
Leo.
  #6 (permalink)  
Antiguo 23/09/2010, 16:34
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 7 meses
Puntos: 39
Respuesta: Condición para que se muestren registros por fecha

Es correcto. No puse lo del where porque eso le deje de tarea a LHG, algo tiene que hacer no? jeje
LHG te seguimos esperando...
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.

Etiquetas: condición, registros, fechas
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 11:25.