查询比较几个日期

时间:2011-10-11 20:32:46

标签: sql

我需要比较一些日期,我的查询在第一个查询中得到3个日期=> 的 2011-09-01, 2011-10-01, 2011-11-01

第二个查询中的3个日期=> 的 2011-07-01, 2011-11-01, 2011-08-01

那么如何比较它们并避免这个SQL错误?:

“子查询返回多个值,当它跟随=,!=,<,< =,>,> =或用作表达式时,这是不正确的。”

由于

SELECT 
 c_Fk_IdBoleta as Numero_Boleta,
 'Pregunta (12)' as Numero_Pregunta,
 'El período transcurrido entre siembra y cosecha no corresponde al tipo de cultivo' as Detalle_Error
  FROM
    Clt_Sembrado as sembrado
  WHERE
     sembrado.c_Fk_IdBoleta = 45550711
    GROUP BY sembrado.c_Fk_IdBoleta, sembrado.d_MesAnioSiembra, sembrado.d_MesAnioCosecha, sembrado.si_Fk_IdDesglose
    HAVING 
   ( SELECT  sembrado.d_MesAnioCosecha 
   FROM Clt_Sembrado as sembrado, Clt_Desglose as desglose 
   WHERE sembrado.si_Fk_IdDesglose = desglose.si_Pk_IdDesglose 
   AND sembrado.c_Fk_IdBoleta = 45550711
   )                                                           >           (SELECT DATEADD(Month,6,sembrado.d_MesAnioSiembra)
                                                                            FROM Clt_Desglose as desglose, Clt_Sembrado as sembrado
                                                                            WHERE (((sembrado.si_Fk_IdDesglose = desglose.si_Pk_IdDesglose)AND
                                                                            (desglose.c_Fk_CodCiiu4 = 0112.00
                                                                            OR desglose.c_Fk_CodCiiu4 = 0111.01
                                                                            OR desglose.c_Fk_CodCiiu4 = 0111.02
                                                                            OR desglose.c_Fk_CodCiiu4 = 0113.01
                                                                            OR desglose.c_Fk_CodCiiu4 = 0113.03
                                                                            OR desglose.c_Fk_CodCiiu4 = 0113.05
                                                                            OR desglose.c_Fk_CodCiiu4 = 0113.06
                                                                            OR desglose.c_Fk_CodCiiu4 = 0113.07
                                                                            OR desglose.c_Fk_CodCiiu4 = 0113.08
                                                                            OR desglose.c_Fk_CodCiiu4 = 0113.10                            
                                                                            ))
                                                                            AND sembrado.c_Fk_IdBoleta = 45550711))

以下是表格:问题是一个文字可以在表格Blt_Sembrado中插入一次或多次,我需要验证d_MesAnioCosecha是否更少(d_MesAnioSiembra + 6个月)。对于Blt_Sembrado表中插入的每个CULTIVE。

enter image description here

1 个答案:

答案 0 :(得分:0)

你的问题在这里:

AND sembrado.c_fk_idboleta = 40480711) > (SELECT ...

为了完成这项工作,您必须确保您的子选择最多只返回一个值。

如果您的日期必须大于返回的所有日期,那么它与大于返回的最大日期相同,因此使用MAX将解决您的问题:

AND sembrado.c_fk_idboleta = 40480711) > (SELECT 
   Dateadd(MONTH, 6, max(sembrado.d_mesaniosiembra))
...