正在搜索堆栈,但无法找到具体的答案。我在医院工作,希望让我们的日常生活更轻松。我们从放置的导管收集数据,并且每天一次或有时两次访问患者。我写了一些php来存储这些信息(SQL Server 2012)。有一个表dbo.patients:
|ID|PatientID|Station|Name |Catheter|Room|VisitDate|Visit
-----------------------------------------------------------------------------
|1 |123456789|ACHI |Muller|PDK |12 |12.12.17 |all fine, nothing special
|2 |123456789|ACHI |Muller|PDK |12 |13.12.17 |catheter removed
|3 |234567891|GYN |Meyer |PDK |4 |04.07.17 |pain in the back, raised bolus
|4 |123456789|ACHI |Muller|PDK |12 |14.12.17 |no infection, dismiss
|5 |234567891|GYN |Meyer |PDK |4 |05.07.17 |still pain, raised up to 12
|6 |234567891|GYN |Meyer |PDK |4 |06.07.17 |non functional, removed
ID ist在数据库处自动递增,而不是在表单中输入。 PatientID是医院的独特价值。 所有其他列可能是相同的(例如,每天10个导管或所有Catheter = PDK或两个名称相同或者它们共享相同的房间......)。 每天将有大约20个数据库进入数据库。
我的目标是,显示目前有导管的患者名单。因此,我需要所有列,但只需要最新的VisitDate - 这意味着,PatientID不允许出现两次。给定示例的输出应如下所示:
|ID|PatientID|Station|Name |Catheter|Room|VisitDate|Visit
-----------------------------------------------------------------------------
|4 |123456789|ACHI |Muller|PDK |12 |14.12.17 |no infection, dismiss
|6 |234567891|GYN |Meyer |PDK |4 |06.07.17 |non functional, removed
我已经在php中显示了这个表,显示了SELECT * FROM dbo.patients
,但我需要过滤这个,我不知道为什么。我尝试了SELECT DISTINCT
,什么过滤了PatientID,但它只返回一列,我需要整行。
通过搜索堆栈流程我找到了类似的东西并试了一下:
WITH t AS (
SELECT ROW_NUMBER() OVER(
PARTITION BY PatientID
ORDER BY VisitDate
) AS rnum,*
FROM dbo.patients
)
SELECT * FROM t a WHERE rnum IN (
SELECT MAX(rnum) FROM t
GROUP BY PatientID
HAVING t.PatientID=a.PatientID
)
它有效,但我不知道它是否合适或者是否有人有一个不那么复杂的想法。另外,我真的没有,如果他显示最新的条目。
提前致谢!
德克
答案 0 :(得分:1)
您可以使用如下的row_number:
Select top (1) with ties * from yourtable
order by row_number() over(partition by Patientid order by VisitDate desc)
您可以在外部查询中使用row_number的其他方法:
Select * from (
Select *, RowN = Row_number() over(partition by PatientId order by VisitDate desc) from yourtable ) a
Where a.RowN = 1
输出如下:
+----+-----------+---------+--------+----------+------+------------+-------------------------+
| Id | PatientId | Station | Name | Catheter | Room | VistitDate | Visit |
+----+-----------+---------+--------+----------+------+------------+-------------------------+
| 4 | 123456789 | ACHI | Muller | PDK | 12 | 2017-12-14 | no infection, dismiss |
| 6 | 234567891 | GYN | Meyer | PDK | 4 | 2017-07-06 | non functional, removed |
+----+-----------+---------+--------+----------+------+------------+-------------------------+