[英]How to join 2 tables and get the latest records from other table in one-to-many relation using SqlAlchemy ORM
[英]How to get count of NULL records in one-to-many join
我有一個account
和plan
表,在該表中,用戶帳戶在給定時間可以沒有任何計划,也沒有與之關聯的單個/多個或無效的計划。
account
表:
+---------+-------------+---+
| ID | account_id | ..|
+---------+-------------+---+
| 1 | 111111 | |
| 2 | 222222 | |
| 3 | 333333 | |
| 4 | 444444 | |
+---------+-------------+---+
plan
表:
+----+--------------------+----------------+-----------------+---------------------+---------------------+
| id | account_id | attribute_key | attribute_value | start_date | end_date |
+----+--------------------+----------------+-----------------+---------------------+---------------------+
| 1 | 111111 | RPC | AB | 2011-10-01 00:00:00 | NULL |
| 2 | 111111 | RPC | CND | 2011-10-01 00:00:00 | NULL |
| 3 | 222222 | RPC | IA | 2011-10-01 00:00:00 | 2015-04-01 00:00:00 |
| 4 | 222222 | RPC | CND | 2011-10-01 00:00:00 | 2015-04-01 00:00:00 |
| 5 | 333333 | RPC | IA | 2011-10-01 00:00:00 | 2015-04-01 00:00:00 |
| 6 | 333333 | RPC | CND | 2011-10-01 00:00:00 | NULL |
+----+--------------------+----------------+-----------------+---------------------+---------------------+
如果end_date
為NULL
則認為關聯計划處於活動狀態。 我試圖提出一個查詢,該查詢將返回僅與inactive
計划相關聯的帳戶列表或計數。 基於上述內容,它將是222222
因為它有兩個與之關聯的計划,但都被標記為非活動。
+----+--------------------+----------------+-----------------+---------------------+---------------------+
| id | account_id | attribute_key | attribute_value | start_date | end_date |
+----+--------------------+----------------+-----------------+---------------------+---------------------+
| 3 | 222222 | RPC | IA | 2011-10-01 00:00:00 | 2015-04-01 00:00:00 |
| 4 | 222222 | RPC | CND | 2011-10-01 00:00:00 | 2015-04-01 00:00:00 |
+----+--------------------+----------------+-----------------+---------------------+---------------------+
在派生表(子查詢)中,您可以獲取僅具有“非活動計划”的account_id
值列表:
SELECT account_id
FROM plan
GROUP BY account_id
HAVING COUNT(end_date IS NULL) = 0 /* No plan with null end date */
現在,您可以使用此子查詢聯接回plan
表,以獲取該account_id
所有計划:
SELECT p.*
FROM plan AS p
JOIN (
SELECT account_id
FROM plan
GROUP BY account_id
HAVING COUNT(end_date IS NULL) = 0
) AS dt ON dt.account_id = p.account_id
我認為還可以。
SELECT
p.*
FROM
Plan
INNER JOIN Account a USING (account_id)
WHERE p.account_id NOT IN (
SELECT p2.account_id FROM Plan p2 WHERE p2.end_date IS NULL
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.