def patients_by_group_date(group=None, group_type=None, interval='month'):
"""
Number of patients in each group over time.
"""
query = db.session.query(
GroupPatient.group_id,
GroupPatient.patient_id,
func.min(GroupPatient.from_date).label('date')
)
query = query.join(GroupPatient.patient)
query = query.filter(Patient.test == false())
if group is not None and group.type == 'SYSTEM':
query = query.filter(Patient.current(group) == true())
else:
query = query.filter(Patient.current() == true())
# Filter by patients beloning to the specified group
if group is not None:
patient_alias = aliased(Patient)
group_subquery = db.session.query(patient_alias)
group_subquery = group_subquery.join(patient_alias.group_patients)
group_subquery = group_subquery.filter(
patient_alias.id == Patient.id,
GroupPatient.group == group,
)
group_subquery = group_subquery.exists()
query = query.filter(group_subquery)
# Filter by group type
if group_type is not None:
query = query.join(GroupPatient.group)
query = query.filter(Group.type == group_type)
query = query.group_by(GroupPatient.group_id, GroupPatient.patient_id)
query = query.cte()
results = _get_results(query, interval)
return results
评论列表
文章目录