我們目前有一個users表,在名為 的表上有一個one-to-many關系steps。每個用戶可以有四個步驟或七個步驟。表steps架構如下:
id | user_id | order | status
-----------------------------
# | # |1-7/1-4| 0 or 1
我正在嘗試查詢所有1步驟中狀態為的所有用戶。因此,如果它們有 4 個或 7 個步驟,它們的狀態都必須為 1。
我嘗試在第 4 步上進行檢查(因為如果前一個步驟也未完成,則無法完成一個步驟),但是如果有 7 個步驟的人完成了第 4 步但沒有完成第 7 步,則會出現問題。
select u.first_name, u.last_name, u.email, date(s.updated_at) as completed_date
from users u
join steps s on u.id = s.user_id
where s.order = 4 and s.status = 1;
uj5u.com熱心網友回復:
聚合函式應該幫助您識別用戶的bool_and所有步驟,狀態 = 1,無論步驟數是多少。
然后array_agg聚合函式可以幫助查找與updated_at每個用戶的最后一步關聯的日期,方法是根據日期排序order DESC并選擇結果陣列中的第一個值[1]:
SELECT u.first_name, u.last_name, u.email
, s.completed_date
FROM users u
INNER JOIN
( SELECT user_id
, (array_agg(updated_at ORDER BY order DESC))[1] :: date as completed_date
FROM steps
GROUP BY user_id
HAVING bool_and(status :: boolean) -- filter the users with all their steps status = 1
) AS s
ON u.id = s.user_id
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/439346.html
標籤:PostgreSQL 加入 筛选 一对多
