首页 > 解决方案 > SQL Server,获取指定日期范围内的最新记录

问题描述

如果可能的话,我试图弄清楚如何通过视图来做到这一点(当然知道这可以通过函数和/或 proc 在线完成。

有一个视图需要对数据集进行重复数据删除并选择最近的记录。所以我试图通过交叉应用使用 wither row_number(),甚至是前 1 个订单,但问题是查询可以过滤一个日期,例如。

select x
from view
where date < somedate

并且需要为该过滤数据集计算最新记录。有没有办法在视图中做到这一点?想到一个相关的子查询,但尽我所能,要么我得到完整的数据集,要么它在没有日期过滤器的情况下选择表上的最新数据,然后在事后应用日期过滤器,这不是一回事.

每个 Yogesh 的一些背景:有问题的表包含员工表的历史记录,其中每个employee_id 可以以不同的日期值多次存在。此表上有一个主键,即employeehistory_id(身份)。目标是获取日期 < 某个日期的所有员工的最新记录(每位员工 1 条唯一记录)。窗口化的问题是它几乎需要在视图的子查询中包含日期过滤器(从我所看到的)。希望这有助于澄清答案。

目前的观点是这样的

    SELECT a.*
    FROM employeehistory a
    join (select employee_id, employeehistory_ID, row_number()OVER(PARTITION 
                 BY employee_id ORDER BY Date DESC) as Ranked
          FROM employeehistory) b
      on a.employee_id = b.employee_id
      and a.employeehistory_ID = b.employeehistory_ID
    where b.Ranked = 1

如您所见,使用日期过滤视图不一定会传播到内部。所以询问是否有办法仍然保持这个功能在一个视图中。再一次,我知道这可以作为函数或过程来完成。谢谢!

我们使用的是 SQL Server 2016 企业版。

标签: sqlsql-servertsqlsql-server-2016

解决方案


怎么样

select top 1 x
from view
where date < somedate
order by date desc

推荐阅读