SQL Server,获取指定日期范围内的最新记录

时间:2018-08-15 13:24:37

标签: sql sql-server tsql sql-server-2016

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

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

select x
from view
where date < somedate

,并且需要为该过滤后的数据集计算最新记录。有没有办法做到这一点?我想到了一个相关的子查询,但我可能会尝试,要么获取完整的重复数据集,要么选择不带日期过滤器的表中最新的数据,然后在事实之后应用日期过滤器,这不是同一回事

每个Yogesh的背景: 该表包含一个employee表的历史记录,其中每个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
如您所见,

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

我们正在使用SQL Server 2016企业版。

3 个答案:

答案 0 :(得分:2)

怎么样

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

答案 1 :(得分:1)

SELECT TOP 1 x
FROM [View]
WHERE 
    date < somedate
ORDER BY 
    date DESC

答案 2 :(得分:0)

select *
from MyView
where myDate < somedate
order by myDate desc
limit 1;

limit 1与top 1相同,但对于MySQL。我有一个小提琴,显示了我认为您的预期输出也应该是什么样子。 http://sqlfiddle.com/#!9/209226/7