多个SQL上的SQL Top 1查询

时间:2014-02-05 15:14:27

标签: sql sql-server

我有一个返回下表的脚本。如果我将脚本放在子查询中并给它一个假名,那么每个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

2 个答案:

答案 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具有相同的事件日期,您可能会获得一些重复的行。