SQL查询比较来自同一表的多个返回结果的日期

时间:2014-12-21 08:33:25

标签: sql oracle

我正面临一个问题。我想比较一个日期与通过SUBQUERY返回的同一个表中的多个值。查询目的是查找用户-9插入的地址,并且他们的modified_date小于除了-9之外的用户插入的地址的modified_date,其中address_type_id是本地地址。

例如,查询是

select pps_id,name
from individual_address i
where i.modified_by = -9
and i.address_type_id=1
and i.modified_date < (select modified_date from individual_address a where a.modified_by <> -9 
and a.address_type_id=1);

此查询提供异常,因为它返回多行时无法进行此比较。我知道这不对。有人可以帮助我,我怎样才能实现同样的目标?

示例数据示例

Individual_Address
PPS_ID      MODIFIED_BY MODIFIED_DATE   ADDRESS_TYPE_ID     EMIRATES
1234        -9      15-05-2009      1         2
1234        1       15-05-2010      2         1
1234        1       15-05-2010      1         2
1900        1       15-05-2014      1         1
1900        1       15-05-2014      2         1
1900        1       10-07-2010      1         1

我希望得到针对-9的所有记录,其中address_type_id为1但其修改日期小于用户不是-9的修改日期。

谢谢,

2 个答案:

答案 0 :(得分:2)

select pps_id,name
    from individual_address i
    where i.modified_by = -9
    and i.address_type_id=1
    and i.modified_date < (select MIN(modified_date) from individual_address a 
                           where a.modified_by <> -9 
                           and a.address_type_id=1);

这里的地址可以被很多用户修改。我想你想要modified_date&lt; min(除-9之外的用户的modified_date)

答案 1 :(得分:1)

仅从结果中获取最大和最小日期。

select pps_id,name
    from individual_address i
    where i.modified_by = -9
    and i.address_type_id=1
    and i.modified_date between (select min(modified_date) from individual_address a where a.modified_by <> -9 ) and (select max(modified_date) from individual_address a where a.modified_by <> -9 ) 
    and a.address_type_id=1);