Mysql 如何构造这个子查询?

Mysql 如何构造这个子查询?,mysql,sql,subquery,Mysql,Sql,Subquery,我在mysql中有这个表-没有定义任何键 Real Name : DB Field : Type | -----------------------|------------|------------| Patient ID : pid : varchar50 | White Blood Cell Count : wbc : int | Lab Date :

我在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\U temp组中选择pid、min(wbc)、ldate

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


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

若要获取与最小值关联的数据,请连接到子查询。这里是总体思路

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

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

让我试着重申一下。。。对于每个患者,您需要最小白细胞计数。。。从最低的白细胞计数,你想知道发生的日期

首先从按患者分组的最低计数(分钟)开始。从这一点开始,每个患者重新连接到原始表,并获取具有该最低值的日期

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    

如果所有的基本原则都是用燧石来表达的,那么这个世界肯定会更幸福(如果有点混乱的话)。如果没有定义键,那么你就没有桌子了。在这种情况下,假设没有患者每天可以提交超过一个wbc,那么(pid、wbc、ldate)将是主键的合理候选。非常感谢DRapp。你成就了我的一天。@DasunChathuradha,不客气,作为一个新手,点击向上箭头可以找到帮助你解决问题的答案。对于那些真正的解决方案,在箭头下方有一个复选标记。这表明“这”是有效的解决方案。它还可以帮助其他人寻找类似的问题,以及做了什么工作。同时也标志着其他试图帮助的人不要去问已经解决的问题。