Sql server 重复数据时,如何按组查找最小日期

Sql server 重复数据时,如何按组查找最小日期,sql-server,gaps-and-islands,Sql Server,Gaps And Islands,所以,我的问题如下 我有一个带有时间戳日期和时间的数据集。我有另一个显示文件状态的字段,这个状态应该从一个阶段流向下一个阶段,但偶尔它会循环回到前一个阶段。发生这种情况时,我需要显示发生此更改时的时间戳 例如,我需要知道“指示”中某个项目的最小日期,这很好,我有这个。然后我需要知道的是,如果一个文件移动到“未指示”并再次返回到“指示”,那么这里的最小时间戳是多少-即示例中的07/01/2020,因此实际上忽略了文件上次处于“未指示”阶段之前的任何内容。此循环可能会发生多次,我始终需要显示处于“指

所以,我的问题如下

我有一个带有时间戳日期和时间的数据集。我有另一个显示文件状态的字段,这个状态应该从一个阶段流向下一个阶段,但偶尔它会循环回到前一个阶段。发生这种情况时,我需要显示发生此更改时的时间戳

例如,我需要知道“指示”中某个项目的最小日期,这很好,我有这个。然后我需要知道的是,如果一个文件移动到“未指示”并再次返回到“指示”,那么这里的最小时间戳是多少-即示例中的07/01/2020,因此实际上忽略了文件上次处于“未指示”阶段之前的任何内容。此循环可能会发生多次,我始终需要显示处于“指示”状态的文件的最新最小日期。我正在使用MS SQL Server


如果我没有弄错,您可以使用lag:


这就是所谓的缺口和孤岛问题

由于为样本数据提供了一个图像,我尚未对此进行测试,但我不怀疑这会起作用:

以GRP作为 选择AuditTimeStamp, 邮票 按审核时间戳排列的订单上的行号- 分区上的行号(按阶段顺序,按审核时间戳,按Grp) 从dbo.YourTable 选择minauditimestamp作为minauditimestamp, 邮票 来自Grps 按邮票分组, 玻璃钢 Minauditimesttamp ASC的订单;
select t.*
from (
    select t.*, lag(stage) over(order by audit_timestamp) lag_stage
    from mytable t
) t
where stage = 'Instructed' and (lag_stage is null or lag_stage <> 'Instructed')