2016-04-25 117 views
0

我正在使用SQL Server和Management Studio 2014,並且正在計算數據庫中每種情況下藥物隨時間的累積劑量。下面是一個假設的案例和時間樣本。SQL隨着時間推移的累計和

Case_Name | InductionTime   | DoseTime    | EndTime     |NEdose 
2Z378J01  | 2007-03-07 08:58:00.000 | 2007-03-07 09:35:00.000 | 2007-07-03 13:06:15.000 | 0.01 
2Z378J01  | 2007-03-07 08:58:00.000 | 2007-03-07 12:04:00.000 | 2007-07-03 13:06:15.000 | 0.02 
2Z378J01  | 2007-03-07 08:58:00.000 | 2007-03-07 12:53:00.000 | 2007-07-03 13:06:15.000 | 0 
2Z668I02  | 2007-06-06 08:46:00.000 | 2007-06-06 13:22:00.000 | 2007-06-06 13:51:45.000 | 0.04 
2Z9C8E01  | 2007-09-12 08:46:00.000 | 2007-09-12 11:22:00.000 | 2007-12-09 11:46:00.000 | 0.02 
2Z9C8E01  | 2007-09-12 08:46:00.000 | 2007-09-12 11:30:00.000 | 2007-12-09 11:46:00.000 | 0 
2Z9C8E01  | 2007-09-12 08:46:00.000 | 2007-09-12 11:42:00.000 | 2007-12-09 11:46:00.000 | 0.01 
2Z9C8E01  | 2007-09-12 08:46:00.000 | 2007-09-12 11:44:00.000 | 2007-12-09 11:46:00.000 | 0.02 

我需要做的是找到以下的總和:

[NEdose1] x ([InductionTime] - [DoseTime1]) +  //only if [InductionTime] > [DoseTime1] 
[NEdose1] x ([DoseTime2] - [DoseTime1]) + 
[NEdose2] x ([DoseTime3] - [DoseTime2]) + ... + 
[NEdose(n-1)] x ([DoseTime(n]) - [DoseTime(n-1)]) 
[NEdose(n)] x ([EndTime] - [DoseTime(n)]) = TotalDose 

Where [NEdose1] represents the value of the NEdose column in row 1 when the table is ordered by DoseTime. 

The numbering scheme is the same for DoseTimes continuing to row n 

每個Case_Name分。有些病例只有NEdose和DoseTime,有些病例多達20例。NE劑量以每分鐘劑量計,所以時間扣除的單位以分鐘爲單位。

如果您對我入門有任何建議(我只是SQL的「愛好者」),他們將不勝感激。

編輯:我試圖澄清我期望的計算

回答

0

這是太長了評論。

我不遵循你的邏輯。在計算的描述中有像NEdose1這樣的表達式,但沒有那個名稱的列。

鑑於數據結構,我期望dosetime,endtimenedose是關鍵列。假設劑量是每天,例如:

select case_name, 
     sum(nedose * (datediff(day, dosetime, endtime) + 1)) as totaldose 
from t 
group by case_name; 

鑑於您希望每個案例的摘要,這似乎並不累積。

+0

謝謝戈登。我很抱歉不清楚。在所需計算框中從1到n的每個數字表示按case_name分組並按DoseTime排序的第1行到第n行。所以計算需要使用行之間的值來計算總劑量。 – discopig

相關問題