关于多表查询统计的问题?
有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.部门
------解决方案--------------------加了条件约束,返回的记录少了,当然就快啦。