ORACLE 查询字段为患者名、就诊时间,时间条件为就诊时间小于2024年11月1日,要求查询出的数据中当存在同一个患者有多条就诊记录时只取最接近2024年11月1日的一次
时间: 2024-12-23 13:14:59 浏览: 10
在Oracle数据库中,你可以使用`ROW_NUMBER()`窗口函数结合`PARTITION BY`子句以及`ORDER BY`来实现这个需求。假设你有一个名为`patient_visits`的表,其中包含`patient_name`, `visit_date`等字段,可以编写如下的SQL查询:
```sql
SELECT patient_name, visit_date
FROM (
SELECT patient_name, visit_date,
ROW_NUMBER() OVER (PARTITION BY patient_name ORDER BY ABS(visit_date - TO_DATE('2024-11-01', 'YYYY-MM-DD')) ASC) AS rn
FROM patient_visits
WHERE visit_date < TO_DATE('2024-11-01', 'YYYY-MM-DD')
)
WHERE rn = 1
```
这个查询的工作原理是:
1. `PARTITION BY patient_name` 将数据分为每个患者的组。
2. `ORDER BY ABS(visit_date - TO_DATE('2024-11-01', 'YYYY-MM-DD')) ASC` 根据就诊日期与指定日期的差值(绝对值)进行排序,越接近2024年11月1日的日期排在前面。
3. `ROW_NUMBER()` 为每个分组分配行号,rn=1表示最近的那一次就诊。
结果将只显示每个患者中最接近2024年11月1日的就诊记录。
阅读全文