mysql选择其中一个具有n项的记录

mysql选择其中一个具有n项的记录,mysql,Mysql,我试图获取所有记录,如果其中1个包含n,那么如果我有3个记录,其中任何一个记录的处置_id=1,它们花费的时间总和_等于或大于20,并且属于同一个患者_id Table: Transactions +----+------------+----------------+------------+------------+ | id | patient_id | disposition_id | time_spent | created_at | +----+------------+------

我试图获取所有记录,如果其中1个包含n,那么如果我有3个记录,其中任何一个记录的处置_id=1,它们花费的时间总和_等于或大于20,并且属于同一个患者_id

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的患者