【发布时间】:2020-12-12 12:55:06
【问题描述】:
我的表格如下所示
我必须选择每个 PatientID 的每一秒记录,这会给出以下结果(我的最后一个查询返回此结果)
然后我必须选择日期最早的记录,如下所示(这是我想要的最终结果)
到目前为止我所做的:我有一个 CTE,可以获取我需要的所有数据
WITH cte
AS
(
SELECT visit.PatientTreatmentVisitID, mat.PatientMatchID,pat.PatientID,visit.RegimenDate AS VisitDate,
ROW_NUMBER() OVER(PARTITION BY mat.PatientMatchID, pat.PatientID ORDER BY visit.VisitDate ASC) AS RowNumber
FROM tblPatient pat INNER JOIN tblPatientMatch mat ON mat.PatientID = pat.PatientID
LEFT JOIN tblPatientTreatmentVisit visit ON visit.PatientID = pat.PatientID
)
然后我针对 CTE 编写查询,但到目前为止我只能返回每个患者 ID 的第二行
SELECT *
FROM
(
SELECT PatientTreatmentVisitID,PatientMatchID,PatientID, VisitDate, RowNumber FROM cte
) as X
WHERE RowNumber = 2
如何只返回日期最早的记录?是否有我可以在某处包含的 MIN() 函数?
【问题讨论】:
-
如果您指定了您正在使用的 RDBMS 和版本,这将有所帮助,例如SQL Server 2008(或其他)
-
我使用的是 SQL Server 2016
-
向我们扔这么多粗体并不会使问题更容易阅读。同样在未来,我们更喜欢将数据格式化为文本,而不是图像。
标签: sql sql-server sql-order-by greatest-n-per-group window-functions