【发布时间】:2016-03-24 20:49:35
【问题描述】:
我们有一个患者数据库,其中显示了他们多次访问我们办公室的详细信息,例如他们在访问期间的体重。我想生成一份报告,根据访问日期与患者首次访问日期之间的差异(可能是最大值但不超过 X 天)返回访问(表中的一行)。
这很令人困惑,所以让我举个例子。假设我有一张名为patient_visits 的表格:
visit_id | created | patient_id | weight
---------+---------------------+------------+-------
1 | 2006-08-08 09:00:05 | 10 | 180
2 | 2006-08-15 09:01:03 | 10 | 178
3 | 2006-08-22 09:05:43 | 10 | 177
4 | 2006-08-29 08:54:38 | 10 | 176
5 | 2006-09-05 08:57:41 | 10 | 174
6 | 2006-09-12 09:02:15 | 10 | 173
在我的查询中,如果我想在“30 天”内运行此报告,我想返回 visit_id = 5 所在的行,因为它是未来 28 天,而下一行是 35 天之后未来,这太过分了。
我尝试了很多方法,例如将表连接到自身,或者在WHERE 子句中创建子查询以尝试返回created 的最大值,其中它等于或小于@ 987654326@,但我现在似乎不知所措。作为最后的手段,我可以将所有数据拉入一个 PHP 数组并在那里构建一些逻辑,但我真的不想这样做。
更大的图景是这样的:数据库有大约 5,000 名患者,每名患者的就诊次数不限。我想建立报告来告诉我从第一次就诊到 X 天后所有患者的平均等待损失是多少(也就是说,从每个患者第一次就诊开始的 X 天,而不是任意的 X 天时间段)。我希望如果我能解决上述问题,我就能解决剩下的问题。
【问题讨论】:
-
让我换种说法:对于每个患者 ID,应该进行 最早 访问(我们称之为 anchor),然后找到另一个访问 anchor i>距离锚点最远的,但距离锚点不超过 X 天。所有其他访问(即那些更接近锚点和 X 天以上的访问)应被丢弃。对吗?
标签: mysql