我得到了这个表:
<表类>
ID
日期
事件
眼睛
tbody><<tr>111 2022-01-01 10月 左 111 2022-01-04 VA 左 111 2022-01-05 注入 左 111 2022-06-01 10月 对 111 2022-06-01 VA 对 111 2022-06-05 10月 对 111 2022-06-05 VA 对 111 2022-06-05 注入 对 表类>
我相信CROSS APPLY
或OUTER APPLY
是你需要的。两者都连接到一个子选择,该子选择允许您选择特定的匹配标准,排序,最重要的是在这种情况下TOP 3
。
ACROSS APPLY
类似于(内)JOIN
,而OUTER APPLY
类似于LEFT JOIN
。使用后者可以在注入没有先验事件的情况下使用。
结果查询类似于:
SELECT PRIOR.*
FROM MY_TABLE T
OUTER APPLY (
SELECT TOP 3 *
FROM MY_TABLE T2
WHERE T2.ID = T.ID
AND T2.EYE = T.EYE
AND T2.DATE <= T.DATE -- Should we allow same-day event?
ORDER BY T2.DATE DESC
) PRIOR
WHERE T.EVENT = 'INJECTION'
ORDER BY T.ID, T.DATE, T.EYE, PRIOR.DATE
结果:
<表类>ID 日期 事件 眼睛 tbody><<tr>111 2022-01-01 10月 左 111 2022-01-04 VA 左 111 2022-01-05 注入 左 111 2022-06-05 VA 对 111 2022-06-05 10月 对 111 2022-06-05 注入 对 表类>