根据单个日期列计算每天的平均值

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;