如果可能的话,我试图通过视图弄清楚如何做到这一点(肯定知道这可以通过函数和/或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企业版。
答案 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