2016-10-28 484 views
0

需要一些幫助進行SQL日期計算:SQL日期計算

在表格中,我有18歲以上的病人死於某種疾病(表a)。在另一張表格中,我有患同一種疾病的患者和他們被診斷患有這種疾病的最早日期(表b)。

我需要知道的是自從他們被診斷以及他們死亡12個月後。

有人可以幫助我執行這個日期計算。

對於日期,表a中的列是indexdate,列b中的死亡列是死亡時的列。

感謝所有幫助

表A:

patientid--age--deathdate 
1   20 11/05/2016 
2   19 10/09/2015 

表B:

PatientID--indexdate 
1   01/02/2015 
2   08/03/2014 

所以基本上我要的是檢查是否12個月indexdate和deathdate之間傳遞。

+0

林不知道你想要什麼..你能請張貼你的表像嗎? – Sk1X1

+0

你能否提供表格定義和一個示例查詢---可能不完整---表明你想得到什麼。對於單個病人?對於單一疾病?如何識別診斷?等等 –

+0

重複:http://stackoverflow.com/questions/17833176/postgresql-days-months-years-between-two-dates – McNets

回答

0

這給出了自診斷和死亡12個月後患者的名單。

SELECT A.patientID, A.patientName 

FROM tableA A 
INNER JOIN 
(
SELECT patientID , MIN(DiagnoseDate) As EarliestDate 
FROM tableB 
GROUP BY patientID 
) As B 

ON A.patientID = B.patientID 
WHERE date_part('month',age(EarliestDate, DeathDate)) >=12 
+0

之後會給這個去。既然它說>> = 12,我假設它也會爲那些在12個月前死亡的人提供結果? – timz

+0

不,這給出了他們的死亡日期和最早診斷日期差異的患者名單是12個月' –

+0

如果我想要12個月或更長時間,該怎麼辦? – timz

-1

你應該能夠做到這一點通過編寫由患者ID鏈接2個表的查詢,然後使用DATEADD函數在where子句中,這將是這樣的例子:

WHERE TableA.deathdate>(DATEADD(month,12,TableB.indexdate))

+0

Postgres中沒有'dateadd()' –

+0

啊 - 我甚至沒有注意到它是postgress--只是看到了SQL。 – Webbo

+0

..但相同的邏輯應該與postgress等效工作http://stackoverflow.com/questions/27080505/dateadd-equivalent-in-postgresql – Webbo