Append Query con campo condicionado a su valor

El problema a resolver es el siguiente: tengo una append query en la que quiero que una de las condiciones de un campo sea variable en función del valor del mismo.
En concreto debo comparar una fecha con el valor de hoy-1 o hoy-3 en función de si el día que se realiza la query es un lunes o no y que los lunes compare despreciando los fines de semana.
Para ello en el criterio de la query pongo este 'Iif':
IIf(Weekday(Now()=2);'<Format((Now()-3);"YYYYMMDD")';'<Format((Now()-1);"YYYYMMDD")')
O sea: si hoy es lunes compara la fecha con hoy-3 y si no es lunes compara la fecha con hoy-1.
El caso es que no da ningún error pero tampoco funciona, mientras que si le pongo uno de los 2 criterios deseados sin el 'Iif' funciona correctamente.
¿Alguna idea de como hacer que funcione?

1 respuesta

Respuesta
1
Pues ponla bien, eso no es fecha:
IIf(Weekday(Now()=2);Now()-3;Now()-1)
Ya sé que no es una fecha, pero necesito compararlo en el formato YYYYMMDD para que realmente elija las fechas correctamente: si comparamos 31032009 con 01042009 nos dirá que es mayor la fecha de marzo, mientras que si lo hacemos 20090331 con 20090401 nos dará realmente la fecha mayor.
Por eso necesito hacer la comparación con formato.
Saludos
En tu pregunta dices:
"En concreto debo comparar una fecha con el valor de hoy-1 o hoy-3..."
En que quedamos, quieres comparar una fecha o no, aclarate anda, así no perderemos el tiempo. En cualquier caso podrías pegar el resto del código de la query para ver donde está el fallo.
Vamos a ver si aclaro lo que no lo parece: quiero añadir los registros que cumplan varias condiciones y una de ellas es que un campo fecha sea inferior a hoy-3 o hoy-1 en función de si hoy es lunes o no. Para hacer que la comparación de quien es mayor funcione, realizo la comparación con el Format en YYYYMMDD por lo explicado en otro post.
Creo que el problema esta en que no es capaz de interpretar correctamente el 'Iif' al tener que poner la instrucción Format interna entre comillas, pero si no la pones entre comillada da errores al interpretar que los paréntesis del format cierran el Iif. Si pongo las condiciones del Iif una por una y pruebo, el append query funciona sin problemas pero al incluirlo en el Iif no lo consigo.
Añado el código que solicitas para ver si se encuentras algo. Como es muy largo sólo incluyo el Where. Con el que no trata ningún registro pero en otro post ya que no me cabe en este
Este es el código que hay en la query:
from [LIQ-1-00-ConsultaMaxRefLVA-3parte] LEFT JOIN [01-LIQ-OpsPdtsHastaD] on [LIQ-1-00-ConsultaMaxRefLVA-3parte].[ref LVA] = [01-LIQ-OpsPdtsHastaD].[ref LVA]
where ((([LIQ-1-00-ConsultaMaxRefLVA-3parte].Mercat)<>"NASDAQ USA" And ([LIQ-1-00-ConsultaMaxRefLVA-3parte].Mercat)<>"NEW YORK STOCK EXCHANGE") And (([LIQ-1-00-ConsultaMaxRefLVA-3parte].[Estat LVA])="Liquidada") And ((Format([LIQ-1-00-ConsultaMaxRefLVA-3parte.SICAtimestamp],"DDMMYYYY"))=Format(Now(),"DDMMYYYY")) AND ((Format([LIQ-1-00-ConsultaMaxRefLVA-3parte.VD],"YYYYMMDD"))<Format(Now(),"YYYYMMDD")) And (([01-LIQ-OpsPdtsHastaD].[ref LVA]) Is Null)) Or ((([LIQ-1-00-ConsultaMaxRefLVA-3parte].Mercat)="NASDAQ USA" Or ([LIQ-1-00-ConsultaMaxRefLVA-3parte].Mercat)="NEW YORK STOCK EXCHANGE") And (([LIQ-1-00-ConsultaMaxRefLVA-3parte].[Estat LVA])="Liquidada") And ((Format([LIQ-1-00-ConsultaMaxRefLVA-3parte.SICAtimestamp],"DDMMYYYY"))=Format(Now(),"DDMMYYYY")) And ((Format([LIQ-1-00-ConsultaMaxRefLVA-3parte.VD],"YYYYMMDD"))<IIf(Weekday(Now()=2),'Format((Now()-3);"YYYYMMDD")','Format((Now()-1);"YYYYMMDD")')) And (([01-LIQ-OpsPdtsHastaD].[ref LVA]) Is Null));
Pues perdona pero sigo alucinando, para comparar fechas no es necesario convertirlas a YYYYMMDD, vamos que si tienes 1/1/2009 y la comparas con 31/12/2008 te saldrá que es mayor la 1ª ¡Si son fechas!. Por tanto te sobran todos los format, el código que yo pondría en la última parte sería:
And ([LIQ-1-00-ConsultaMaxRefLVA-3parte].VD<IIf(Weekday(Now()=2),Date()-3,Date()-1) And [01-LIQ-OpsPdtsHastaD].[ref LVA]) Is Null);
en lugar de:
And ((Format([LIQ-1-00-ConsultaMaxRefLVA-3parte.VD],"YYYYMMDD"))<IIf(Weekday(Now()=2),'Format((Now()-3);"YYYYMMDD")','Format((Now()-1);"YYYYMMDD")')) And (([01-LIQ-OpsPdtsHastaD].[ref LVA]) Is Null));
Pues yo también alucino: empecé haciendo lo que indicas pero al no funcionar fui probando distintas cosas.
Sigo probando
Gracias por la atención prestada

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas