2014-02-05 51 views
1

我有一個腳本,它返回下表。如果我將腳本放在子查詢中並給出一個假名,那麼對於每個CARE_ID,哪個腳本會在EVENT_DATE生成最上面一行?這必須與SQL2000兼容。謝謝。多列SQL查詢1

CARE_ID EVENT_ID EVENT_TYPE EVENT_DATE 
    3  18   B   13/07/2010 00:00 
    78  11   C   27/07/2009 00:00 
    78  9   T   28/07/2009 00:00 
    151  49   T   21/03/2010 00:00 
    217  102   C   30/03/2010 00:00 
    355  111   C   16/07/2010 00:00 
    355  56   T   17/07/2010 00:00 
    364  774   C   23/08/2012 00:00 
    369  117   C   28/07/2010 00:00 
    631  74   T   15/01/2010 00:00 
    631  148   C   02/02/2010 00:00 
    1066 91   T   15/11/2010 00:00 
    2123 280   T   10/07/2011 00:00 
    2265 448   C   31/05/2011 00:00 
    2512 183   B   04/02/2014 00:00 
    2691 906   C   12/01/2014 00:00 
    2694 307   T   15/06/2011 00:00 
    2694 544   C   02/07/2011 00:00 
    2892 85   B   19/12/2011 00:00 
    2892 641   C   13/02/2012 00:00 
    3038 660   C   09/08/2011 00:00 
    3162 407   T   15/04/2012 00:00 
    3178 780   C   01/09/2012 00:00 
    3311 175   B   27/01/2014 00:00 
    3344 869   C   01/10/2013 00:00 
    3426 474   T   13/07/2013 00:00 
    3606 479   T   03/01/2014 00:00 
    3770 917   C   11/01/2014 00:00 
+3

是第一行最早的事件日期嗎?例如,您對care_id 631期望哪一行? – Sparky

回答

0

試試這個,承擔的最早日期是頂行

select x.care_id,min(x.event_date) as FirstDate 
from <table> x 
group by x.care_id 

要獲得所有信息,你需要多一點

select x.care_id,a.event_id,a.event_type,x.firstDate as Event_date 
from <table> a 
join (select b.care_id,min(b.event_date) as FirstDate 
     from <table> b 
     group by b.care_id) x 
on a.care_id=x.care_id and a.event_date=x.firstDate 

剛上飛輸入,而應該得到你所需要的東西。

警告,如果care_id具有相同的事件日期,則可能會得到一些重複的行。

+0

Sparky - 看起來不錯,但我如何返回整行/所有4列。謝謝 –

+0

這有點棘手,但我會添加到我的答案 – Sparky

+0

Sparky - 抱歉,但重新閱讀我的問題,我可以看到,我沒有讓我完全清楚後,我是什麼! –

1

這有點低效率的,但我認爲沒有更好的辦法來做到這一點在SQL Server 2000:

select 
    t1.care_id, 
    t1.event_id, 
    t1.event_type, 
    t1.event_date 
from TheTable t1 
join TheTable t2 
    on t1.care_id = t2.care_id 
    and t1.event_date >= t2.event_date 
group by 
    t1.care_id, 
    t1.event_id, 
    t1.event_type, 
    t1.event_date 
having count(*) = 1 

查詢返回當前每care_id的最新記錄。如果您需要最老的,只需將>=更改爲<=即可。

SQLFiddle:http://www.sqlfiddle.com/#!3/98536/6

與上面的查詢的潛在問題是,如果你有兩個記錄具有相同(最新)event_date,它將返回無。讓我知道這樣的情況是否可能在你的數據集中。

+0

w0lf - 這是一個很好的觀點。我正在開發一個數據庫,它充滿了垃圾,所以有重複的日期。我必須手動醫治我的桌子才能取出這些咒語。在現實世界中,不應該有欺騙,因爲患者不應該在同一天開始兩次治療,但你永遠不知道。事實上,除了EVENT_DATE之外,沒有辦法分隔行。 EVENT_ID從各種表中拉入,一個值不會優先於另一個值 - 不是數字或其他值。感謝您的幫助。 –