【问题标题】:How to construct this subquery?如何构造这个子查询?
【发布时间】:2016-12-31 17:36:45
【问题描述】:

我在 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 的日期列的第一个值。

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

【问题讨论】:

  • 如果没有定义键,那么你就没有表。在这种情况下,假设没有患者每天可以提交超过一个 wbc,那么 (pid,wbc,ldate) 将是 PRIMARY KEY 的合理候选者

标签: mysql sql subquery


【解决方案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

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

【讨论】:

  • 如果所有基本原则都用燧石来表达,那么世界肯定会更快乐(如果稍微有点混乱)。
【解决方案2】:

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

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

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    

【讨论】:

  • 非常感谢 DRapp。你让我开心。
  • @DasunChathuradha,不客气,作为新手,通常单击向上箭头以获取有助于您解决问题的任何答案。对于那些实际上是解决方案的人,箭头下方有一个复选标记。这些表明“这个”是有效的解决方案。它还可以帮助其他人寻找类似的问题以及 DID 的工作原理。并且还标记以便其他试图帮助的人不要去解决已经解决的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
  • 2011-03-24
相关资源
最近更新 更多