簡體   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