根据单个日期列计算每天的平均值
Calculate average value per day based on single date column
我的数据如下:
ID DATE_ADM DRUG_NAME DRUG_VALUE
2 2010-12-01 05:00:00.00 FORMULA VI 50
2 2010-12-01 10:30:00.00 FORMULA VI 40
2 2010-12-02 01:00:00.00 FORMULA V 20
1 2014-01-01 11:00:00.00 FORMULA V 40
1 2014-01-01 23:00:00.00 FORMULA IV 80
1 2014-01-02 11:00:00.00 FORMULA IV 80
我想计算类似药物名称的每日平均值。所以我最终得到一个 table 如下:
ID DATE_ADM DRUG_NAME DRUG_VALUE AVG_DAY_VALUE
2 2010-12-01 05:00:00.00 FORMULA VI 50 45
2 2010-12-01 10:30:00.00 FORMULA VI 40 45
2 2010-12-02 01:00:00.00 FORMULA V 20 20
1 2014-01-01 11:00:00.00 FORMULA V 40 60
1 2014-01-01 23:00:00.00 FORMULA IV 80 60
1 2014-01-02 11:00:00.00 FORMULA IV 80 80
Joel Coehoorn 建议使用以下方法来计算 datediff,我将其改编为类似这样的东西
datediff(day, date, coalesce(lag(date) over(partition by ID, DRUG_NAME order by id, date))) as day_diffs
avg(drug_value) over(partition by id, drug_name, day_diffs) as AVG_DAY_VALUE
到目前为止运气不好。任何帮助将不胜感激。
您想要的结果似乎只是:
select *,
Avg(drug_value) over(partition by id, Convert(date,date)) Avg_Day_Value
from t
order by id desc, date;
我的数据如下:
ID DATE_ADM DRUG_NAME DRUG_VALUE 2 2010-12-01 05:00:00.00 FORMULA VI 50 2 2010-12-01 10:30:00.00 FORMULA VI 40 2 2010-12-02 01:00:00.00 FORMULA V 20 1 2014-01-01 11:00:00.00 FORMULA V 40 1 2014-01-01 23:00:00.00 FORMULA IV 80 1 2014-01-02 11:00:00.00 FORMULA IV 80
我想计算类似药物名称的每日平均值。所以我最终得到一个 table 如下:
ID DATE_ADM DRUG_NAME DRUG_VALUE AVG_DAY_VALUE 2 2010-12-01 05:00:00.00 FORMULA VI 50 45 2 2010-12-01 10:30:00.00 FORMULA VI 40 45 2 2010-12-02 01:00:00.00 FORMULA V 20 20 1 2014-01-01 11:00:00.00 FORMULA V 40 60 1 2014-01-01 23:00:00.00 FORMULA IV 80 60 1 2014-01-02 11:00:00.00 FORMULA IV 80 80
Joel Coehoorn 建议使用以下方法来计算 datediff,我将其改编为类似这样的东西
datediff(day, date, coalesce(lag(date) over(partition by ID, DRUG_NAME order by id, date))) as day_diffs
avg(drug_value) over(partition by id, drug_name, day_diffs) as AVG_DAY_VALUE
到目前为止运气不好。任何帮助将不胜感激。
您想要的结果似乎只是:
select *,
Avg(drug_value) over(partition by id, Convert(date,date)) Avg_Day_Value
from t
order by id desc, date;