【问题标题】:Error when COUNT after MAX?MAX 后 COUNT 时出错?
【发布时间】:2010-09-13 08:33:17
【问题描述】:

我在医学数据库中有一个表格 Act:

IDAct   Historic      IDPatient
1       2001-01-01    1
1       2001-01-02    1
2       2001-01-01    2
3       2001-01-03    1

我想计算 IDActPerPatient 列:

IDAct   Historic      IDPatient  IDActPerPatient
1       2001-01-02    1          1
2       2001-01-01    2          1
3       2001-01-03    1          2

Act 表包含 Acts 以及每一次修改的历史。 (索引是对 (IDAct,Historic))。 所以我对最后修改的行为感兴趣:

SELECT A.IDActe, MAX(Historic) AS Historic FROM Act A GROUP BY IDAct

现在,我想为每位患者的使徒行传编号。因此,我计算了一名患者的 IDAct 小于或等于的行为数。 我已经使用上一个请求创建了一个视图 LastAct,我尝试了这个:

SELECT DA1.*, COUNT(*) AS IDActPerPatient
FROM LastAct DA1
INNER JOIN LastAct DA2 ON DA1.IDPatient = DA2.IDPatient 
AND DA2.IDActe >= DA1.IDAct
GROUP BY DA1.IDAct

...这不起作用! 当一个行为在历史上有多个版本时,我会在 IDActPerPatient 中获得大量数据(对于在 3 个版本中有 1 个行为的患者,我有 81 个)。

你知道问题出在哪里吗?

【问题讨论】:

    标签: sql mysql count


    【解决方案1】:
    SELECT A.IDActe,
           MAX(Historic) AS Historic,
           (SELECT COUNT(DISTINCT IDAct) FROM ACT B WHERE A.IDPatient=B.IDPatient)
    FROM Act A
    GROUP BY IDAct
    

    ?

    【讨论】:

      【解决方案2】:

      谢谢!我在选择中使用的选择不够,但在这里真的很有帮助! 这是固定的请求:

      SELECT A.IDAct, A.IDPatient, 
             MAX(Historic) AS Historic, 
             (SELECT COUNT(DISTINCT IDAct) FROM Act B WHERE A.IDPatient=B.IDPatient 
              AND A.IDAct>=B.IDAct) AS IDActPerPatient
      FROM Act A
      GROUP BY IDAct
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-27
        • 2019-08-15
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        • 2012-12-26
        相关资源
        最近更新 更多