按多个表列排序

时间:2018-03-11 07:52:35

标签: sql oracle

我想运行一个查询,根据另一个表的列中是否存在值来排序我的数据,如果另一个列中没有数据,它应该按当前表中的列排序。

说明: -

成员表:包含所有成员的列表。

消息表:存储两个成员之间的聊天对话

            From_ID is basically sender id

            To_ID is basically recipient id

如果成员1002登录到应用程序,我想要从成员表中检索所有用户的列表,其顺序应首先包含成员1002在消息表中最近会话(发送或接收)的用户,然后是其他用户来自会员表。

表:成员

id  name
1001    john
1002    vicky
1003    Joseph
1004    Donald
1005    David
1006    Ram
1007    Watson
1008    Jacob
1009    cathrine

表:消息

from_id to_id    date
1003    1009     21-01-2018
1007    1002     21-01-2018
1008    1001     02-01-2018
1002    1008     01-01-2018
select * 
from members 
where id = '1002' order by (messages????????);

结果:     输入id 1002

Desired output:

    1007
    1008
    1001
    1003
    1004
    1005
    1006
    1009

1 个答案:

答案 0 :(得分:2)

您首先需要用户1002的最近对话伙伴。实现此目的的最简单方法是按最新消息日期排序:

select *
from members m
where id <> 1002
order by 
(
  select max(ms.date) 
  from messages ms 
  where (ms.from_id = m.id and ms.to_id = 1002)
     or (ms.from_id = 1002 and ms.to_id = m.id)
) desc nulls last;
相关问题