繁体   English   中英

SQL Server 2000-基于最近日期的数据行

[英]SQL Server 2000 - Row of data based on closest date

我有两个表如下,我想返回的行CARE_IDWHO_STATUS其中MDT_DATE是作为最接近的日期<=最早SURGERY_DATE每个CARE_ID

例如,对于CARE_ID 5MDT_DATE <=最早的SURGERY_DATE18/07/2009则为17/07/2009因此WHO_STATUS为2,依此类推。

下面的脚本在SQL Server 2005中可以正常运行,但与SQL Server 2000向后不兼容。

我该如何重新编写此脚本,使其在SQL Server 2000中运行?

CARE_ID SURGERY_DATE
5       18/07/2009 00:00
5       23/07/2009 00:00
5       23/07/2009 00:00
5       23/07/2009 00:00
5       01/09/2009 00:00
5       03/09/2009 00:00
70      20/07/2009 00:00
70      21/07/2009 00:00
76      03/03/2010 00:00
78      08/07/2009 00:00
81      27/07/2009 00:00
82      27/07/2009 00:00
83      30/07/2009 00:00
86      29/07/2009 00:00
91      30/07/2009 00:00
103     03/08/2009 00:00
106     05/08/2009 00:00
125     07/08/2009 00:00
172     19/05/2010 00:00


CARE_ID MDT_DATE            WHO_STATUS
5       17/07/2009 00:00    2
5       03/11/2009 00:00    1
70      23/03/2010 00:00    0
81      03/11/2009 00:00    1
81      18/11/2009 00:00    1
81      27/11/2009 00:00    3
81      27/03/2010 00:00    1
103     03/12/2008 00:00    0
103     04/01/2009 00:00    2
103     06/01/2010 00:00    1
103     08/02/2010 00:00    1
103     14/01/2013 00:00    1
172     20/07/2009 00:00    4
172     08/01/2010 00:00    3
172     25/09/2010 00:00    1

查询(在SQL Server 2005中工作):

SELECT t1.*,t2.WHO_STATUS
FROM (SELECT ROW_NUMBER() OVER (PARTITION BY CARE_ID ORDER BY SURGERY_DATE) AS Seq,*
     FROM Table1)t1
      CROSS APPLY(SELECT TOP 1 WHO_STATUS FROM Table2
           WHERE CARE_ID = t1.CARE_ID
           AND MDT_DATE < = t1.SURGERY_DATE
           ORDER BY MDT_DATE DESC)t2
WHERE t1.Seq=1

您可以为此使用相关子查询:

select t1.*,
       (select top 1 who_status
        from table2 t2
        where t2.care_id = t1.care_id and
              t2.mdt_date <= t1.surgery_date
        order by t2.mdt_date desc
       ) as who_status
from Table1 t1;

这在SQL Server 2005中也将起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM