以下sql server 2005查詢當前正在成功運行。我需要修改「p.Tx_Intent」以基於同一個表中的日期列「p.Eff_DtTm」進行顯示,因此它只顯示患者的最新Tx_Intent(Eff_DtTm)。根據另一列的日期字段獲取結果
WITH T AS
(SELECT s.Pat_Name, s.IDA, s.Pat_ID1, p.Tx_Intent,
ShortDesc = MAX(CASE WHEN s.SysDefStatus = 'SC' THEN s.Short_Desc END),
Consult = MAX(CASE WHEN s.Activity = '123'
AND s.SysDefStatus = 'C' THEN s.App_DtTm END),
SIM = MAX(CASE WHEN s.Activity = '456'
THEN s.App_DtTm END),
PLANNING = MAX(CASE WHEN s.Activity = '789'
THEN s.App_DtTm END),
TreatmentStart = MAX(CASE WHEN s.SysDefStatus = 'SC' THEN s.App_DtTm END),
TreatmentFinished = MAX(CASE WHEN s.SysDefStatus = 'FC' THEN s.App_DtTm END)
FROM vw_Schedule s
LEFT OUTER JOIN PatCPlan p
ON s.Pat_ID1=p.Pat_ID1
WHERE s.Activity IN ('123', '456', '789')
OR s.SysDefStatus IN ('SC', 'FC', 'C')
GROUP BY s.Pat_Name, s.IDA, s.Pat_ID1, p.Tx_Intent
)
SELECT Pat_Name,
IDA,
Tx_Intent,
ShortDesc,
Consult,
Days = (DATEDIFF(dd, Consult, SIM)+1)-(DATEDIFF(wk, Consult, SIM)*2),
SIM,
Days = (DATEDIFF(dd, SIM, PLANNING)+1)-(DATEDIFF(wk, SIM, PLANNING)*2),
PLANNING,
Days = (DATEDIFF(dd, PLANNING, TreatmentStart)+1)-(DATEDIFF(wk, PLANNING, TreatmentStart)*2),
TreatmentStart,
Days = (DATEDIFF(dd, TreatmentStart, TreatmentFinished)+1)-(DATEDIFF(wk, TreatmentStart, TreatmentFinished)*2),
TreatmentFinished
FROM T;
好吧,所以我想出了一種方法來確定最新的日期,我只是有問題結合它與我目前的查詢。這裏是查詢我需要結合頂部查詢
SELECT Pat_ID1, Tx_Intent from (select
Pat_ID1
,Tx_Intent
,Eff_DtTm
,row_number() over (partition by Pat_ID1 order by abs(datediff(dd, Eff_DtTm, getdate()))) Ranking
from PatCPlan) xx
where Ranking = 1
感謝您的幫助!
您的原始查詢可能並不是一次完成,而是逐漸增長。如果我是你,我會採用同樣的方法,使用你發現的查詢作爲基礎,並圍繞它建立新的查詢。如果你堅持保留舊的查詢,並以某種方式將新的查詢「交織」到其中,試着瞭解它是如何工作的,這應該有所幫助(假設你非常清楚你現在的查詢是如何工作的)。 –
我似乎只能得到它一次顯示1個結果:\ – user2861854