首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何选择不同的ID,然后显示完整的行?

如何选择不同的ID,然后显示完整的行?
EN

Stack Overflow用户
提问于 2017-08-05 22:24:20
回答 1查看 74关注 0票数 0

正在搜索堆栈,但找不到具体的答案。我在医院工作,想让我们的日常生活更轻松。我们从放置的导管收集数据,每天访问患者一次,有时两次。我写了一些php来存储这些信息(SQL Server2012)。有一个表dbo.patients:

代码语言:javascript
复制
|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在数据库中自动递增,而不是在表单中输入。PatientID在医院是独一无二的价值。所有其他列可能是相同的(例如,每天10导管或所有导管= PDK,或两个名称相同或它们共享相同的房间...)。每天大约有20个条目进入数据库。

我的目标是,列出目前有导管的病人名单。因此,我需要所有列,但只需要最新的VisitDate -这意味着PatientID不允许显示两次。给定示例的输出应如下所示:

代码语言:javascript
复制
|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,但它只返回一列,我需要整个行。

通过搜索searchingstackoverflow,我发现了类似的东西,并尝试了一下:

代码语言:javascript
复制
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
 )

它是有效的,但我不知道它是否合适,或者是否有人也有一个不那么复杂的想法。另外,如果他显示最新的条目,我真的不能理解。

提前感谢!

德克

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-05 22:34:45

您可以使用row_number,如下所示:

代码语言:javascript
复制
Select top (1) with ties * from yourtable
   order by row_number() over(partition by Patientid order by VisitDate desc)

可以在外部查询中使用row_number的其他方法:

代码语言:javascript
复制
Select * from (
   Select *, RowN = Row_number() over(partition by PatientId order by VisitDate desc) from yourtable ) a
   Where a.RowN = 1

输出如下:

代码语言:javascript
复制
+----+-----------+---------+--------+----------+------+------------+-------------------------+
| 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 |
+----+-----------+---------+--------+----------+------+------------+-------------------------+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45522979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档