帐号对话记录显示


      前一段时间被一个帐号对话记录显示的sql给难住了,这个表结构是 table test {send_id varchar2(15), recv_id varchar2(15), send_time date, context varchar2(200) } 要把帐号A与帐号B的对话记录显示出来,因为帐号A发送给帐号B 与帐号B发送给帐号A的字段不在一起这样不容易做成一个组来显示,不过最后想如果是给定帐号这样的操作就容易很多,
select * from (
select send_id,recv_id,send_times,context from test
where send_id='A' and recv_id ='B'
union
select send_id,recv_id,send_times,context from test
where send_id='B' and recv_id ='A')

order by send_time

这个是给定了两个帐号的,

如果是如定一个帐号时

select decode(bchange,1,recv_id,send_id),decode(bchange,1,send_id,recv_id), sendtime,context from(

select * from (
select send_id,recv_id,send_times,context ,0 bchange from test
where send_id='A'
union
select recv_id,send_id,send_times,context,1 bchange from test
where recv_id ='A')

order by send_id,recv_id,send_time)

这样就可以先把两个联合后再排序,到最后再交换位置

 

如果只给出时间条件的话,这样的还要做别一种方法,这种方法可以效果少一些,不过都可以完成前两个情况

select decode(bchange,1,recv_id,send_id),decode(bchange,1,send_id,recv_id), sendtime,context from(

select * from (

select greatest(send_id,recv_id) send_id,least(send_id,recv_id) recv_id, send_time,context,decode(greatest(send_id,recv_id),send_id,"0","1") bchange from test

where send_time between to_Date('2008-10-10') and  to_Date('2008-11-10'))

order by send_id,recv_id,send_time

)

这样可以来分组显示聊天记录,可能效率会差很多,

希望大家有什么好的想法,请多多提点,谢谢

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值