mysql选择其中一个具有n项的记录
我试图获取所有记录,如果其中1个包含n,那么如果我有3个记录,其中任何一个记录的处置_id=1,它们花费的时间总和_等于或大于20,并且属于同一个患者_idmysql选择其中一个具有n项的记录,mysql,Mysql,我试图获取所有记录,如果其中1个包含n,那么如果我有3个记录,其中任何一个记录的处置_id=1,它们花费的时间总和_等于或大于20,并且属于同一个患者_id Table: Transactions +----+------------+----------------+------------+------------+ | id | patient_id | disposition_id | time_spent | created_at | +----+------------+------
Table: Transactions
+----+------------+----------------+------------+------------+
| id | patient_id | disposition_id | time_spent | created_at |
+----+------------+----------------+------------+------------+
| 1 | 10 | 25 | 10 | NOW() |
+----+------------+----------------+------------+------------+
| 2 | 10 | 1 | 2 | NOW() |
+----+------------+----------------+------------+------------+
| 3 | 10 | 12 | 9 | NOW() |
+----+------------+----------------+------------+------------+
| 4 | 12 | 1 | 8 | NOW() |
+----+------------+----------------+------------+------------+
预期结果
Table: Transactions
+------------+------------+
| patient_id | time_spent |
+------------+------------+
| 10 | 21 |
+------------+------------+
患者id为12的患者不会显示,即使其处置id为1,也不会花费20或更多时间。但10号病人两者都有
到目前为止,我的问题是:
SELECT t.patient_id, t.disposition_id AS did, SUM(t.time_spent) AS sum_time
FROM transactions AS t
WHERE
YEAR(t.created_at) = YEAR(CURDATE()) AND MONTH(t.created_at) = MONTH(CURDATE())
GROUP BY
t.patient_id
HAVING sum_time >= 20
我尝试在where和having子句中使用IN(1,t.disposition_id),但返回了0条记录。我感觉自己离得很近,但似乎无法把它放在一起。通过
patient\u id
聚合,然后声明您的两个要求:
SELECT
t.patient_id,
SUM(t.time_spent) AS sum_time
FROM transactions t
WHERE
YEAR(t.created_at) = YEAR(CURDATE()) AND MONTH(t.created_at) = MONTH(CURDATE())
GROUP BY
t.patient_id
HAVING
COUNT(CASE WHEN t.disposition_id = 1 THEN 1 END) > 0 AND
SUM(t.time_spent) > 20;
您可以在where子句中使用子查询来搜索每个处置id为1的患者