根据表关系计算MinDate和MaxDate

时间:2019-03-28 13:05:41

标签: sql

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

患者1(Abc)的访问日期应通过对患者的“筛查”访问来计算。

例如,如果患者(Abc)在2019年3月23日进行了探访,则显示了最小日期(2019年3月22日)和最大日期(2019年3月25日)。

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

因此,如果您看到visitWindowId,则可以看到我提到了MinDays(1)和MaxDays(2),这将使用VisitName的VisitDate计算为“筛选”。

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

我写了所需的查询来获得结果

表-VisitEntry

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

表格-VisitWindow

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

期望的QueryResult

--------------------
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

1 个答案:

答案 0 :(得分:0)

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

SQL Server:

$locationData = [
    'purchase_location' => 0
];
$itemData     = [];
foreach($queryResults as $result) {
   $locationData['purchase_location'] += $result['totalPurchase'];
   $itemData['purchase_item']          = $result['totalPurchase'];
}

Oracle:

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