Postgresql
兩列不同,如何擺脫“重複”
我有一個包含消息的表,其中包含“msg_from”和“msg_to”欄位。
當我想從每個聊天中選擇所有目前聊天和最後一條消息時,我使用以下查詢:
select distinct on (msg_from, msg_to) array[msg_from, msg_to] as participants from mockdata_messages order by msg_from, msg_to DESC
範例:https ://www.db-fiddle.com/f/n1Bttz4i9Cd5RVA9qCpNkH/1
這在 Postgres 12 中執行良好
問題是我得到“重複”作為回應。我的意思是,“參與者”的價值觀是:
$$ 2, 5 $$和$$ 5, 2 $$,這顯然是指同一個聊天。 當我嘗試對兩列使用“分組依據”時,我得到了完全相同的結果。我怎樣才能解決這個問題?哪些方法可以很好地用於在數據庫中儲存聊天消息?
在這個簡單的範例中,您可以使用最小和最大函式在兩種情況下使不同的條件匹配。
select distinct on ( least(msg_from, msg_to),greatest(msg_from, msg_to)) array[msg_from, msg_to] as participants from mockdata_messages order by least(msg_from, msg_to),greatest(msg_from, msg_to)