下面是我正在编写的查询的简化,但它简化了我不知道该怎么做的部分。
我有一张购买表。在此表中,有一个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
任何帮助都将不胜感激。
答案 0 :(得分:1)
首先选择所有过期的组:
select ifrprodid from prod_table where cgroup='M' and dexpire < ?
现在我们需要这些组中的所有产品,因此在此列表中使用ifprodid。有两种选择:
select p.* from prod_table p inner join prod_table g on p.ifrprodid=g.ifrprodid where g.cgroup='M' and g.dexpire < ?
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()
)