日期:2014-05-19  浏览次数:20419 次

关于多表查询统计的问题?
有3个表
表1
编号             部门           日期1         状态
10001           01             2007-02-02       0
10002           01             2007-02-06       0
10003           02             2007-02-01       0
10006           02             2007-03-02       0
10001           03             2007-03-01       0
10005           03             2007-03-01       0
………………………
表2
编号             部门           日期2         状态
10003           02             2007-02-10       1
………………………
表3
编号             部门           日期
10001           01             2007-02-03
10002           01             2007-02-10
10003           02             2007-02-06
10006           02             2007-03-02
10001           03             2007-03-01
10005           03             2007-02-22
10005           03             2007-03-02
.......................
要求在2007-02-01至2007-03-03时间段,根据表1的”编号”和”部门”(如果编号重复取日期1最大的),同时编号在表2中不存在,若存在则要求在日期1大于日期2,在表3按部门统计编号数量(不重复)。即得到如下结果:
部门       数量
01               1
02               1
03               2
............
如果表1和表2合并是不是效率更高?(但日期1和日期2分开成2个字段)这时语句又该怎样写?

------解决方案--------------------
若存在则要求在日期1大于日期2,

这句没看懂!
------解决方案--------------------
是不是
select a.部门,
count(a.编号) as 数量 --或者 count(distinct a.编号) as 数量
from 表1 a left join 表2 b
on a.编号=b.编号 and a.部门=b.部门
where b.编号 is null or a.日期1> a.日期2
group by a.部门

表3不知道怎么参与进来,参与进来太乱
------解决方案--------------------
上面不对
select a.部门,
count(a.编号) as 数量 --或者 count(distinct a.编号) as 数量
from (
select * from 表1 x
where not exists (
select 1 from 表1
where 编号=x.编号
and 日期1> x.日期1
)
) as a left join 表2 b
on a.编号=b.编号 and a.部门=b.部门
where b.编号 is null or a.日期1> a.日期2
group by a.部门

------解决方案--------------------
加了条件约束,返回的记录少了,当然就快啦。