0

我在 mysql 中有这个表 - 没有定义任何键。

        Real Name      : DB Field   :    Type    |
-----------------------|------------|------------|
       Patient ID      :   pid      : varchar50  |
White Blood Cell Count :   wbc      : int        |
        Lab Date       :   ldate    : datetime   |
-------------------------------------------------|

每位患者都完成了 10 次实验室测试。这些测试在 10 个不同的日子里完成。因此,对于一名患者,表格中有 10 行(具有相同的 pid),其中包含 10 个“wbc”值及其实验室测试日期。在上表中,我想获取按“pid”分组的最小“wbc”计数的相应日期

select pid, min(wbc),ldate from tbl_temp group by pid

上面的查询可以获得最小的 wbc,但不能获得同一行中的相应日期。它只获取相关 pid 的日期列的第一个值。

请帮我为此编写一个组合查询。

4

2 回答 2

1

要获取与最小值关联的数据,请加入子查询。这是一般的想法

select fred, barney, mindate
from MyTable
join (
select wilma, min(datefield) mindate
from MyTable
group by Wilma ) temp on temp.Wilma = MyTable.Wilma
and datefield = mindate

您应该能够弄清楚如何将这个概念融入您自己的情况。

于 2013-05-08T12:40:10.147 回答
0

让我尝试重申... 对于每个患者,您需要最低白细胞计数... 从最低白细胞计数中,您想知道它发生的日期。

首先从按患者分组的最低计数(分钟)开始。从那里,每个患者重新加入原始表并获取具有最低值的日期。

select
      yt2.pid,
      yt2.wbc,
      yt2.ldate
   from
      ( select 
              yt1.pid,
              min( yt1.wbc ) LowestWBCValue
           from
              YourTable yt1
           group by
              yt1.pid ) PreQuery
         Join YourTable yt2
            on PreQuery.pid = yt2.pid
           AND PreQuery.LowestWBCValue = yt2.wbc    
于 2013-05-08T12:46:13.367 回答