Postgresql

兩列不同,如何擺脫“重複”

  • December 27, 2019

我有一個包含消息的表,其中包含“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)

引用自:https://dba.stackexchange.com/questions/256331