我有一个返回下表的脚本。如果我将脚本放在子查询中并给它一个假名,那么每个CARE_ID的EVENT_DATE会产生哪一个脚本?这必须与SQL2000兼容。谢谢。
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
答案 0 :(得分: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
,则它将不返回任何记录。如果您的数据集中存在此类情况,请与我们联系。
答案 1 :(得分: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具有相同的事件日期,您可能会获得一些重复的行。