按分组过期日期查询SQL

按分组过期日期查询SQL,sql,Sql,下面是对我正在编写的查询的简化,但它将其简化为我不确定如何执行的部分 我有一张购物单。在这个表中,有一个ifrprodid、cgroup和dexpire列。如果cgroup列包含“M”,则它是一个分组项。该组中的所有ifrprodid都将与cgroup ifrprodid匹配 ifrprodid cgroup dexpire ... 5 1/1/14 8 M 1/1/14 5 M

下面是对我正在编写的查询的简化,但它将其简化为我不确定如何执行的部分

我有一张购物单。在这个表中,有一个ifrprodid、cgroup和dexpire列。如果cgroup列包含“M”,则它是一个分组项。该组中的所有ifrprodid都将与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
我需要做的是选择ifrproid与ifrproid匹配的所有列,其中cgroup是M,dexpire已经通过

换句话说,因为上面第二列的cgroup为M,过期日期为1/1/14,所以我需要包含ifrproid为8的行。但是,由于第三行(cgroup为M的另一行)尚未过期,因此我不应该得到ifrproid为5的任何行

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

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

任何帮助都将不胜感激。

首先,请选择所有过期的组:

从prod_表中选择ifrprodid,其中cgroup='M'和dexpire<

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

连接:在p.ifrprodid=g.ifrprodid上,从prod_表p内部连接prod_表g中选择p.*,其中g.cgroup='M'和g.dexpire<? 子选择:从prod_表中选择*,其中ifrprodid在其中,从cgroup='M'和dexpire<>的prod_表中选择ifrprodid? 假设通用SQL:

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

您使用的是哪种数据库管理系统?博士后?神谕