sql - 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 企业版。
解决方案
怎么样
select top 1 x
from view
where date < somedate
order by date desc
推荐阅读
- python - Elif 打印错误信息
- python - 带字符串参数的while函数
- javascript - 将过去和未来的日期添加到 Firestore/Firebase
- excel - 如何使用 VBA excel 打开电子邮件会议模板而不是电子邮件
- c - 警告 C4133 - 不兼容的类型
- rx-java - 为什么在 RxJava 中使用 onBackpressureDrop () 会发生这种情况
- java - Selenium WebDriver / Java - 模拟人类光标移动
- java - Apache Ignite 2.x - 我可以利用堆外存储并且仍然有基于时间的驱逐(来自堆上存储和堆外存储)吗?
- dependencies - Android Studio 中的远程二进制文件是什么?幕后究竟做了什么?
- c# - ActionResult 返回时缺少 Null 属性