def patients_by_recruitment_group_date(group, interval='month'):
"""
Number of patients recruited by each group over time.
"""
group_id_c = func.first_value(GroupPatient.created_group_id)\
.over(partition_by=GroupPatient.patient_id, order_by=GroupPatient.from_date)\
.label('group_id')
date_c = func.min(GroupPatient.from_date)\
.over(partition_by=GroupPatient.patient_id)\
.label('date')
query = db.session.query(GroupPatient.patient_id, group_id_c, date_c)
query = query.distinct()
query = query.join(GroupPatient.patient)
query = query.filter(GroupPatient.group_id == group.id)
query = query.filter(Patient.test == false())
if group.type == GROUP_TYPE.SYSTEM:
query = query.filter(Patient.current(group) == true())
else:
query = query.filter(Patient.current() == true())
query = query.cte()
results = _get_results(query, interval)
return results
评论列表
文章目录