sql-server - 识别记录的最新状态以及上次更改的时间
问题描述
感谢您提供机会来解释我的问题。我有一张表格,其中记录了所有入院患者的最新状态。(带有示例数据的表结构如下)。要求是显示每个患者的最新状态以及最新状态出现的时间。
ID | PatientId | Status | TimeOfStatusChange
----------
1 | 1 | Admitted | 2019-07-01 10:00 AM
----------
2 | 1 | In Triage | 2019-07-01 10:15 AM
----------
3 | 1 | In Triage | 2019-07-01 10:30 AM
----------
4 | 1 | Surgery Scheduled | 2019-07-01 11:00 AM
----------
5 | 1 | In Triage | 2019-07-01 11:30 AM
----------
6 | 1 | Surgery Scheduled | 2019-07-01 12:01 PM
----------
7 | 1 | Surgery Scheduled | 2019-07-01 12:30 PM
----------
因此,在此示例中,一名患者在上午 10 点入院。他的最新状态是“已安排手术”,而该状态的最后一次更改是“下午 12:01”。所以,预期的输出是:
PatientId | RecentStatus | TimeWhenStatusAppeared
----------
1 | Surgery Scheduled | 2019-07-01 12:01 PM
检索最新状态非常简单,有帮助的查询是:
select PatientId, Status from StatusTest s1 where s1.ID =
( select max(ID) from StatusTest s2 where s1.PatientId = s2.PatientId)
但是现在的问题是检索此状态的最后更改是一个挑战。任何可以提供帮助的人,非常感谢。
谢谢。
解决方案
这里不需要子查询。窗口功能将ROW_NUMBER()
一次性为您提供所需的一切。
该ORDER BY
子句将您的结果按 分组PatientID
,然后该子句根据子子句中的TOP (1) WITH TIES
将返回的行限制为最近的条目。ORDER BY
OVER
SELECT TOP (1) WITH TIES
PatientID,
Status,
TimeOfStatusChange AS TimeWhenStatusAppeared
FROM
StatusTest
ORDER BY
ROW_NUMBER() OVER (PARTITION BY PatientID ORDER BY TimeOfStatusChange DESC);
推荐阅读
- r - Is there a way where i can rearrange a dataframe and turn it into a 3 column dataframe
- c# - How to query the sum of each person's availability base on their skill
- http - I do not understand this paragraph explaining web browser caching
- javascript - 将 js 对象键值设置为始终引用现有变量
- visual-studio - Visual Studio not recognizing installed Core SDKs
- python-3.x - Plotting Grid Search CV grid parameter results on one graph
- vue.js - Is there anyway to set a different value for the "input" than the vue variable?
- android - 在 Android 中使用 MUPDF 1.2 或更低版本创建 64 位 .so 文件
- reactjs - 这是正确的实现吗,将道具放在 this.setState 中,还请考虑我正在使用 componentDidMount()
- java - 如何将当前用户的特定数据从 firebase 显示到新活动?