SQL随时间的累积和

时间:2016-04-25 17:46:36

标签: sql sql-server sql-server-2012

我正在使用SQL Server和Management Studio 2014,并希望计算数据库中每个案例的药物累积剂量。随后是案例和时间的假设样本。

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的“爱好者”),我们将不胜感激。

编辑:我试图澄清我想要的计算

1 个答案:

答案 0 :(得分:0)

评论太长了。

我不遵循你的逻辑。在计算描述中有NEdose1之类的表达式,但没有具有该名称的列。

鉴于数据结构,我希望dosetimeendtimenedose成为关键列。假设剂量是每天,例如:

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

鉴于您希望每个案例都有一个摘要,这似乎不会累积。