如果其中 1 条记录包含 n,我将尝试获取所有记录,因此如果我有 3 条记录并且其中任何一条记录的 disposition_id = 1 并且它们的 time_spent 总和为 20 或更多并且属于同一个 patient_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 |
+------------+------------+
即使 disposition_id 为 1,patient_id 为 12 也不会显示,它没有花费 20 或更多时间。但 patient_id 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_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;
关于mysql选择其中一条有n项的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55931520/