如何构造这个子查询?

时间:2013-05-08 12:16:21

标签: mysql sql subquery

我在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'计数的相应日期

通过pid从tbl_temp组中选择pid,min(wbc),ldate

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

请帮我写一个综合查询。

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分: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