求有点小逻辑的SQL
表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类型
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类型
...全文
相关推荐
SQL21自学通
SQL中的逻辑运算符EXISTS、ANY、ALL等也被包含,这些用于更复杂的查询条件。9.
100天SQL面试刷题 Day002
SQL面试刷题,常见考察点梳理总结,面试真题训练
Sql语句增删改查
当一个语句中使用了多个逻辑运算符时,首先求 not 的值,然后求 and 的值,最后再求 or 的值。
sql函數,week周數,返回日期
接下来,我们将详细解析这个函数的实现逻辑及其应用场景。### SQL 函数 `WeekToDay` 的实现逻辑#### 1.
sql存储过程根据生日求星座
这种方式不仅可以有效提升查询效率,还能简化客户端的逻辑处理。希望本文能帮助大家更好地理解和应用SQL存储过程。


