求有点小逻辑的SQL
伙柴人 2010-03-25 04:27:49 表a
tid 项目名 状态
1 001 3放行
2 002 3放行
3 003 2测试
4 004 1开始
5 005 1开始
...
表B
id tid 时间 状态
1 1 2009-1-3 1开始
2 1 2009-1-5 2测试
3 1 2009-1-6 3放行
4 1 2009-1-8 close
5 1 2009-1-9 3放行
6 2 2009-2-3 1开始
7 2 2009-2-4 close
8 2 2009-2-5 1开始
9 2 2009-2-6 2测试
10 3 2009-2-8 1开始
11 3 2009-2-9 2测试
12 4 2009-2-10 1开始
13 4 2009-2-11 2测试
14 4 2009-2-11 close
15 4 2009-2-12 3放行
16 5 2009-2-13 1开始
17 5 2009-2-14 close
...
我现在要排除 状态里面最后一条记录为close但没有“3放行”的数据 得到如下表:
表C
tid 项目名 时间 状态
1 001 2009-1-6 3放行
2 002 2009-2-6 2测试
3 003 2009-2-9 2测试
4 004 2009-2-7 3放行
我现在的办法就是用几个not in来一个个条件排除 这样性能及不好,但又想不出其他办法 大家帮帮忙啊!
注:数据库结构不能更变 是SQL2005 其中时间字段是varchar类型