按分组到期日期查询SQL

时间:2014-08-13 21:55:56

标签: sql

下面是我正在编写的查询的简化,但它简化了我不知道该怎么做的部分。

我有一张购买表。在此表中,有一个ifrprodid,cgroup和dexpire列等。如果cgroup列包含“M”,则它是一个分组项。该组中的所有ifrprodids都将匹配cgroup ifrprodid。

ifrprodid   cgroup   dexpire  ...
5                    1/1/14
8           M        1/1/14
5           M        1/1/15
8                    1/1/15
8                    1/1/14

我需要做的是选择ifrprodid匹配ifrprodid的所有列,其中cgroup为M且dexpire已通过。

换句话说,由于上面的第二列有一个C组的M和一个有效期为1/1/14,我需要包含一个ifrprodid为8的行。但是,从第三行开始,另一行有一个M的cgroup尚未过期,我不应该获得ifrprodid为5的任何行。

因此,我的结果应如下所示:

ifrprodid    cgroup     dexpire     ...
8            M          1/1/14
8                       1/1/15
8                       1/1/14

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

首先选择所有过期的组:

select ifrprodid from prod_table where cgroup='M' and dexpire < ?

现在我们需要这些组中的所有产品,因此在此列表中使用ifprodid。有两种选择:

  1. 加入:select p.* from prod_table p inner join prod_table g on p.ifrprodid=g.ifrprodid where g.cgroup='M' and g.dexpire < ?
  2. 子选择:select * from prod_table where ifrprodid in (select ifrprodid from prod_table where cgroup='M' and dexpire < ?)

答案 1 :(得分:1)

假设通用SQL:

select *
from table
where ifprodid in (
  select ifprodid 
  from table
  where cgroup = 'M'
  and dexpire < today()
  )
相关问题