我有一张存储会员记录的表。每位会员每年创纪录一次。 例如:
MEMBER YEAR
--------------
steve 2011
steve 2010
bob 2010
jane 2011
我想要生成的是给定年份的失效成员列表(未续订的成员)。类似于“让所有参加2010年而非2011年参赛的会员”。
我一直在和这个人争吵一段时间,我能找到的最接近的例子涉及比较两个表格。
答案 0 :(得分:3)
SELECT a.member
FROM YOUR_TABLE a
LEFT JOIN YOUR_TABLE b ON b.member = a.member
AND b.year = 2011
WHERE a.year = 2010
AND b.member IS NULL
SELECT a.member
FROM YOUR_TABLE a
WHERE a.year = 2010
AND NOT EXISTS (SELECT NULL
FROM YOUR_TABLE b
WHERE b.member = a.member
AND b.year = 2011)
SELECT a.member
FROM YOUR_TABLE a
WHERE a.year = 2010
AND a.member NOT IN (SELECT b.member
FROM YOUR_TABLE b
WHERE b.year = 2011)
性能取决于比较的列是否为NULL(值可以为NULL):
答案 1 :(得分:0)
如果我们要简化这个问题,那就是“获取未续订x年的会员名单”
如果我们分开这个问题,它将基本上产生,得到所有注册小于指定年份(x)的成员。
所以我们可以将查询写成
select Member from membership where year < 2011
您可以使用某种方法的参数来构建此查询,以便您可以指定年份。
由于
Neelesh