SQL查询以选择所有唯一元组

时间:2019-01-23 19:16:50

标签: sql sqlite

我有以下数据:

data

现在我要做的是获取所有唯一行(按created_at排序),其中source_account_id和target_account_id是唯一的,并且源或目标== 1的最新行

我已经尝试过了,但是当它基本上只返回2时,它会返回4行:

select
    *
from
    messages
where
    source_account_id = 1 OR target_account_id = 1
group by
    source_account_id,
    target_account_id

我期望的结果是2行,其中message_id = 3,6。

总而言之,我想要account_id = 1的最新行(消息)以及他发送过或接收过消息的任何人

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我认为您可以对所需的内容使用相关子查询:

select m.*
from messages m
where m.created_at = (select max(m2.created_at)
                      from messages m2
                      where (m2.source_account_id = m.source_account_id and
                             m2.target_account_id = m.target_account_id
                            ) or
                            (m2.source_account_id = m.target_account_id and
                             m2.target_account_id = m.source_account_id
                            )
                     ) and
      1 in (m.source_account_id, m.target_account_id);