PostgreSQL 中的條件超前/滯後函數
您的任務是產生一個查詢,從給定表中檢索使用者的特定活動序列。您想要確定每個使用者的 B 組下一個活動(總是在 A 組活動之後發生)。
問題定義
考慮下表:
Name | activity | time |
---|---|---|
user1 | A1 | 12:00 |
user1 | E3 | 12:01 |
user1 | A2 | 12:02 |
user2 | A1 | 10:05 |
user2 | A2 | 10:06 |
user2 | A3 | 10:07 |
user2 | M6 | 10:07 |
user2 | B1 | 10:08 |
user3 | A1 | 14:15 |
user3 | B2 | 14:20 |
user3 | D1 | 14:25 |
user3 | D2 | 14:30 |
此表所需的輸出為:
Name | activity | next_activity |
---|---|---|
user1 | A2 | NULL |
user2 | A3 | B1 |
user3 | A1 | B2 |
解決方案
您可以透過利用DISTINCT ON 和CASE 語句結合window 來解決此問題函數:解釋
條件視窗函數
而PostgreSQL 則這樣做不直接支援條件視窗函數(例如,lead(activity) FILTER (WHERE Activity LIKE 'A% ')),您可以使用帶有聚合函數的FILTER子句並將其用作視窗函數:但是,這種方法對於大型資料集來說效率低且不切實際。相反,建議針對小型和大型資料集使用上述解決方案。以上是如何使用視窗函數在 PostgreSQL 中尋找 A 組活動之後的 B 組中的下一個活動?的詳細內容。更多資訊請關注PHP中文網其他相關文章!