表1:tpinfo(id,名字,...)
从表:tpelse(id,级别,工资,时间)
第一个表就不说了,第二个表描述一下.记录一个人的工资变化
记录形式如: 
id,级别,工资,时间
100,6,300,2000-1-1
100,5,320,2000-8-1
100,4,360,2002-11-1
101,3,400,1999-4-1
101,5,320,2000-2-1
101,2,560,2002-11-1
.....
我要查询出所有人员在某个时间的级别及工资怎么写更简单高效呢?注意那个时间哦.

解决方案 »

  1.   

    select b.ID,a.Name,b.级别,b.工资,b,时间 from tpinfo a ,tpelse b where a.ID=b.ID And b.时间 between '2000-1-1' and '2000-8-1'
      

  2.   

    --取小于或等于指定日期的最大时间
    select * from tpelse a join (select max(时间) 时间 from tpelse where 时间<=@dt group by id)b on a.时间=b.时间
      

  3.   

    Dearingsy(辉辉) 你没看明白题目
    ---我要查询出所有人员在“某个时间”的级别及工资
    akuzou(启航)
      我看对,原来要用自连接哦,我本来想的是用子查询,但是tpinfo跟tpelse连接因为要从第二个表中取多个字段(原想要取几个用几个子查询,笨啊,呵呵),并且第二个表还要跟别的表连接,第一个表还有不少的条件。
      其实我第二个表的时间对应人员编号并不是唯一的既一个人有多条相同时间的记录,这个我用了自增字段。akuzou(启航)的语句换一下连接字段即可。
      谢谢了。
      

  4.   

    弄出来了,谢谢大家
    我的是access 数据库语句还有点不同
    select c.* from tcgzzj e inner join (tgzbdjl c inner join (select max(id) as aid from tgzbdjl where 生效时间<='200602' group by 编号) d on c.id = d.aid )  on c.职级技术等级=e.职级或技术等级 where....
      

  5.   

    上边只是一部分,下边这个才是完整的,但还没条件
    select a.编号,a.姓名,a.部门,b.职级技术等级,b.级别名称,b.级别,b.档次 from tpinfo a inner join (select c.*,e.级别名称 from tcgzzj e inner join (tgzbdjl c inner join (select max(id) as aid from tgzbdjl where 生效时间<='200602' group by 编号) d on c.id = d.aid )  on c.职级技术等级=e.职级或技术等级 ) b on a.编号=b.编号