我意识到这是一个以前被问过的问题,但在调查这些帖子后,没有一个完全符合我正在研究的内容。
我有一个访问过某个地点的人的列表,其中许多人已经访问过多次。每个人都有一个唯一的 ID,每次访问都有一个日期和状态(我只查看状态为“未更改”的访问,而不是“取消”、“重新安排”等状态)。我需要做的是只为每个人选择最旧的记录。换句话说,仅查看他们第一次访问的日期。
我以前解决过这样的问题,然后我回去找到了我的旧代码并尝试将其应用于这种特殊情况。问题是,当时,我试图提取给定人员的最新记录,但我不确定如何更改此处的内容以应用于最旧的记录。如果一个人访问了 3 次,而另一个人访问了 7 次,我不知道如何处理我的seqnum变量。
另外,如果我按照当前的方式运行此代码,我仍然会为每个人获取多个记录,这完全是另一个问题。至少未改变访问的过滤器正在工作。
有什么想法吗?
SELECT DISTINCT
PersonID,
PersonName,
VisitDate,
Status,
VisitType
FROM (SELECT VisitInfo.*,
ROW_NUMBER() OVER (PARTITION BY PersonID, VisitDate ORDER BY VisitDate DESC) as seqnum
FROM VisitInfo
WHERE Status = 'Unchanged'
) VisitInfo
WHERE seqnum = 1
ORDER BY VisitDate
Run Code Online (Sandbox Code Playgroud)
您不应该按 分区VisitDate,因为几乎每一行都有自己的分区。
SELECT
PersonID,
PersonName,
VisitDate,
Status,
VisitType
FROM (SELECT VisitInfo.*,
ROW_NUMBER() OVER (PARTITION BY PersonID ORDER BY VisitDate) as seqnum
FROM VisitInfo
WHERE Status = 'Unchanged'
) VisitInfo
WHERE seqnum = 1
ORDER BY VisitDate
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2379 次 |
| 最近记录: |