根据表关系计算最小日期和最大日期

  • 本文关键字:日期 计算 关系 sql
  • 更新时间 :
  • 英文 :


以下是根据要求编写创建查询的条件。

访问 1 患者的日期 (ABC( 应根据患者的"筛查"访问计算。

例如,如果患者 (ABC( 在 2019 年 3 月 23 日访问过,则使用最小日期 (22/Mar/2019( 和 MaxDate (25/Mar/2019(。

在 VisitWindow 中,我将 VisitWindowId 链接到 VisitEntry 表中的 VisitId。

因此,如果您看到 visitWindowId,您可以看到我提到了 MinDays (1( 和 MaxDays(2(,这是使用 VisitDate 计算的,因为 VisitName 等于"筛选"。

例如,我希望查询或编写查询给出以下结果。

我开始编写所需的查询以获得结果

表 - 访问条目

--------------------
RecordId    VisitId     VisitName   VisitDate   PatientId   PatientName
1           1          Screening    23/Mar/2019      100        Abc
2           2          Visit 1 Date 23/Mar/2019      100        Abc

表 - 访问窗口

-------------------
RecordId    VisitId     VisitWindowId   MinDays     MaxDays
1            2           1               1           2

预期查询结果

--------------------
RecordId    VisitId     VisitName      VisitDate    PatientId   MinDate     MaxDate
1              1        Screening      23/Mar/2019     100      NUll        Null
2              2        Visit 1 Date   23/Mar/2019     100      22/Mar/2019 25/Mar/2019

你没有提到数据库,所以我给你 2。

SQL Server:

SELECT ve.RecordID, ve.VisitID, ve.VisitName, ve.VisitDate, ve.PatientID, ve.PatientName,
dateadd(d, sd.VisitDate, -1 * vw.MinDays) MinDate,
dateadd(d, sd.VisitDate, vw.MaxDays) MaxDate
FROM VisitEntry ve
LEFT JOIN VisitEntry sd ON (ve.PatientId=sd.PatientId AND sd.VisitName='Screening')
LEFT JOIN VisitWindow vw ON ve.VisitID=vw.VisitID

神谕:

SELECT ve.RecordID, ve.VisitID, ve.VisitName, ve.VisitDate, ve.PatientID, ve.PatientName,
sd.VisitDate - vw.MinDays MinDate,
sd.VisitDate + vw.MaxDays MaxDate
FROM VisitEntry ve
LEFT JOIN VisitEntry sd ON (ve.PatientId=sd.PatientId AND sd.VisitName='Screening')
LEFT JOIN VisitWindow vw ON ve.VisitID=vw.VisitID

最新更新