Postgresql

僅在特定日期範圍內的每一天獲取第一條消息

  • June 24, 2022

messages

我們如何選擇conv_id每天在對話中發送的第一條消息和第一個回复( )?

筆記:

  1. 可以有很多使用者。
  2. 一個使用者可以發送多條消息。
  3. 這是一個人的數據集,只有兩個人在聊天。
  4. 一整天,多條消息被交換。
  5. 第一條消息可以定義為第一個使用者在第 1 天內的最短髮送時間。
  6. 第一次回复可以定義為第二個使用者在第一天的最短髮送時間。

有一個真正簡單的解決方案DISTINCT ON

SELECT DISTINCT ON (date_trunc('day', sent_time), conv_id, user_id)
      *
FROM   tbl
ORDER  BY date_trunc('day', sent_time), conv_id, user_id, sent_time;

db<>在這裡擺弄

看:

模擬的索引跳過可能會更快。看:

在 的情況下timestamptz,除非明確定義,否則“天”由目前會話的時區設置定義。看:

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