表1 inbox表(收信箱表):msg为短信内容,当d开头代表到达时发送的短信,当w开头表示完成时发送的短信
ID Mbno msg arrivedate arrivetime commport send_ms
1 123456789 ds 10-09-01 08:00:00 1 0
2 123456789 w 10-09-01 08:02:45 1 0
3 987654321 dp 10-09-01 08:05:00 1 0
4 123123123 dp 10-09-01 09:00:12 1 0
5 123123123 w 10-09-01 09:30:00 1 0
6 987654321 w 10-09-01 09:45:11 1 0
7 111111 ds 10-08-31 09:00:34 1 0
8 111111 ds 10-08-31 10:00:00 1 0
9 123456789 dp 10-09-01 10:10:00 1 0
10 123456789 w 10-09-01 10:31:23 1 0
11 123456123 ds 10-09-01 13:00:00 1 0
12 222222 dp 10-09-01 13:05:00 1 0
13 456456456 ds 10-09-01 15:00:00 1 0
14 123456123 ds 10-09-01 14:11:00 1 0
表2 txl表(联系人表)
id name fz tel1 address
1 张三 维修部 123456789 发生大幅
2 李四 维修部 987654321 航空港口
3 王二 维修部 456456456 建设的附近了
4 jkjjk 维修部 465786465 大法官
5 的发挥 维修部 888888 但是法国
6 马yi 业务部 8613804694679 哈市道外区
7 初si 业务部 8613805498415 哈市红旗小区
8 张ba 业务部 8613674691076 哈市新发小区
9 试验1 维修部 123123123 士大夫
10 试验2 业务部 789789789 大法官
11 储运1 储运部 111111 null
12 储运2 储运部 222222 null
13 储运3 储运部 333333 null
14 工程1  工程部 123456123 null
16 工程2  工程部 123456456 null
我想用一条Select语句实现以下形势的排列,只查询“10-09-01”这天的:
daoda--以d开头短信的时间,最大的到达时间
daomsg--以d开头短信的内容,最大到达时间对应的内容
wangong--以w开头短信的时间,最大的完工时间,必须大于某个人对应的daoda时间才显示出来
wanmsg--以w开头短信的内容,最大完工时间对应的内容NAME mbno daoda daomsg wangong wanmsg fz
储运1 111111 储运部
储运2 222222 13:05:00 dp 储运部
工程1  123456123 14:11:00 ds 工程部
李四 987654321 08:05:00 dp 09:45:11 w 维修部
试验1 123123123 09:00:12 dp 09:30:00 w 维修部
王二 456456456 15:00:00 ds 维修部
张三 123456789 10:10:00 dp 10:31:23 w 维修部

解决方案 »

  1.   


     SELECT DISTINCT NAME ,
    mbno,
    ( select max(arrivetime) from inbox where arrivedate='10-09-01' and left(msg,1)='D'and mbno=tel1) daoda,
             ( select max(arrivetime) from inbox where arrivedate='10-09-01' and left(msg,1)='W'and mbno=tel1) wangong,
             ( select msg from inbox where arrivedate='10-09-01' and arrivetime=( select max(arrivetime) from inbox where arrivedate='10-09-01' and left(msg,1)='D'and mbno=tel1)) daomsg,
             ( select msg from inbox where arrivedate='10-09-01' and arrivetime=( select max(arrivetime) from inbox where arrivedate='10-09-01' and left(msg,1)='W'and mbno=tel1)) wanmsg,
             fz
        FROM inbox,
             txl
       WHERE mbno = tel1
    但是当两个人的时间相同时就出现错误了,那位大侠帮解决一下
      

  2.   

    参考
    select txl.ID,txl.name ,txl.tel1 ,d.arrivetime as daoda,d.msg as daomsg ,w.arrivetime as wanggong,w.msg as wangmsg,fz
    FROM txl  LEFT OUTER JOIN 
    (SELECT inbox.* FROM inbox where arrivetime in
     (SELECT Max(T1.arrivetime)
      FROM inbox T1 INNER JOIN txl T2 ON T2.tel1=t1.mbno 
      where t1.arrivedate='10-09-01' and  left(msg,1)='D'
      group by t2.ID)) d on txl.tel1=d.mbno  LEFT OUTER JOIN 
    (SELECT inbox.* FROM inbox where arrivetime in
     (SELECT Max(T1.arrivetime)
      FROM inbox T1 INNER JOIN txl T2 ON T2.tel1=t1.mbno 
      where t1.arrivedate='10-09-01' and  left(msg,1)='w'
      group by t2.ID)) w on txl.tel1=w.mbno