2013-05-08 4 views
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» значениями и датами их лабораторных испытаний. В приведенной выше таблице, я хочу, чтобы получить соответствующую дату для минимального «лейкоцитарной» COUNT сгруппированы по «PID»

выберите PID, мин (лейкоцитарная), LDate из tbl_temp группы ПИД-

выше запроса можно получить минимальные wbc, но не соответствующая дата в той же строке. Он получает первое значение столбца даты для соответствующего pid.

Пожалуйста, помогите мне написать комбинированный запрос для этого.

+0

Если ключей нет, тогда у вас нет таблицы. В этом случае, если предположить, что ни один пациент не может подать более одного wbc/day, тогда (pid, wbc, ldate) будет разумным кандидатом на ПЕРВИЧНЫЙ КЛЮЧ – Strawberry

ответ

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  
+0

Спасибо, что очень много DRapp. Вы сделали мой день. –

+0

@DasunChathuradha, приветствуется, и как новичок, типично нажать стрелку вверх для любых ответов, которые помогут вам в вашем решении. Для тех, кто на самом деле является решением, есть флажок под стрелками. Они указывают, что «это» было решением, которое сработало. Это также помогает другим, кто ищет похожие проблемы и что работает DID. А также отмечает, что другие пытаются помочь не пойти на вопросы, которые уже решены. – DRapp

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 

Вы должны быть в состоянии выяснить, как включить эту концепцию в свою собственную ситуацию.

+0

Если бы все основные принципы были выражены в терминах кремневых камней, то мир был бы более счастливым (если немного больше путают) место. – Strawberry

+0

Огромное спасибо Дэну. –

Смежные вопросы