gpt4 book ai didi

MySQL:如何根据最高修订号计算数据记录集?

转载 作者:太空宇宙 更新时间:2023-11-03 11:25:21 25 4
gpt4 key购买 nike

我的 MySQL 5.7 数据库中的各个条目可以通过 PHP 进行修改:因此可以实现已保存的数据记录集。对于每一次实现,也就是将相同的数据记录集保存 n 次,自动递增设置一个修订号(从 0 开始):

+----+-----------+-----------+-------------------+----------+
| ID | PatientID | SurgeryID | blahblahblah | revision |
+----+-----------+-----------+-------------------+----------+
| 1 | 8883 | 7493 | Appendectomy | 0 |
| 2 | 8883 | 7493 | Appendectomy | 1 |
| 3 | 8883 | 7493 | Lap. Appendectomy | 2 |
+----+-----------+-----------+-------------------+----------+

我感兴趣的数据记录集,当然是编号最高的,因为它是最新的版本:

+----+-----------+-----------+-------------------+----------+
| ID | PatientID | SurgeryID | blahblahblah | revision |
+----+-----------+-----------+-------------------+----------+
| 3 | 8883 | 7493 | Lap. Appendectomy | 2 |
+----+-----------+-----------+-------------------+----------+

(请注意,blahblahblah 术语已被数字替换(见下文),我只是在这里给它们命名是为了让您更好地了解问题。)

如何计算这些过滤后的数据记录集?

到目前为止完成:

过滤最高修订数据记录集的 SQL 查询代码如下所示:

SELECT DISTINCT p.ID, p.PatientID, op.PatID, op.SurgeryID, op.blahblahblah, op.revision
FROM patient_table p
LEFT OUTER JOIN surgery_table op ON op.PatID = p.PatientID
WHERE some restrictions
AND p.PatientID = op.PatID -- possibly redundant
AND NOT EXISTS (SELECT 1
FROM surgery_table op2
WHERE op2.PatID = p.PatientID AND op2.revision > op.revision
);

此 SQL 查询代码运行良好并提供正确的结果。

现在我只想计算执行的各种手术形式。到目前为止,我的 SQL 查询代码如下所示:

SELECT COUNT(IF(op.blahblahblah = '0',1,NULL)) 'No Nurgery',
COUNT(IF(op.blahblahblah = '1',1,NULL)) 'Appendectomy',
COUNT(IF(op.blahblahblah = '2',1,NULL)) 'Lap. Appendectomy',
[... lots of surgical procedures listed here ...],
COUNT(IF(op.blahblahblah = '50',1,NULL)) 'Colostomy',
COUNT(IF(op.blahblahblah = '99',1,NULL)) 'Different Surgery'
FROM surgery_table op
WHERE op.SurgeryDate BETWEEN "2000-01-01" AND "2020-12-31"

当然,这会提供所有数据记录集,无论其修订号如何:

+-------------------+-----------------------------------------------------+
| blahblahblah | COUNTs of blahblahblah / no latest revision numbers |
+-------------------+-----------------------------------------------------+
| Appendectomy | 34579 |
| Lap Appendectomy | 23475 |
| ... | ... |
| Colostomy | 3547 |
| Different Surgery | 49558 |
+-------------------+-----------------------------------------------------+

我如何连接或合并或任何第一个和第二个 SQL 查询以仅计算具有最高修订号的数据记录?

因此,我想要一个这样的表:

+-------------------+-----------------------------------------------------+
| blahblahblah | COUNTs of blahblahblah / latest revision numbers |
+-------------------+-----------------------------------------------------+
| Appendectomy | 3854 |
| Lap Appendectomy | 1473 |
| ... | ... |
| Colostomy | 563 |
| Different Surgery | 2534 |
+-------------------+-----------------------------------------------------+

最佳答案

在查询中,您可以使用 FROM 子句(包括所有连接)来说明您希望从何处获取数据,并使用 WHERE 子句来选择要选择的数据。

因此,如果您想处理相同的数据,请替换您的 FROMWHERE 子句。 IE。删除

FROM surgery_table op
WHERE op.SurgeryDate BETWEEN "2000-01-01" AND "2020-12-31"

从您的第二个查询并将其替换为

FROM patient_table p
LEFT OUTER JOIN surgery_table op ON op.PatID = p.PatientID
WHERE some restrictions
AND p.PatientID = op.PatID -- possibly redundant
AND NOT EXISTS (SELECT 1
FROM surgery_table op2
WHERE op2.PatID = p.PatientID AND op2.revision > op.revision
);

另一种方法是从查询中选择:

select blahblahblah, count(*)
from ( <your first query here> ) q
group by blahblahblah;

关于MySQL:如何根据最高修订号计算数据记录集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54827200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com