SQL Server:根据条件查找日期与当前日期最接近的记录

2024-04-02

我正在使用 SQL Server 2012,并尝试创建一个将根据以下条件返回记录的视图:

  1. 查询需要根据日期检索最适用的记录
  2. 对于内部日期范围内的日期,将返回最接近 CurrentDate 的记录
  3. 对于内部日期范围之外的日期,将返回最接近 CurrentDate 的记录

数据库中的示例表:

Person table:

pId     | Name
----------------------
01      | Person 1
02      | Person 2
----------------------

人物日期 table:

dId     |  pId      | StartDate     | EndDate
---------------------------------------------------
A1      |   01      |   2014-01-08  |   2018-01-08  
A2      |   01      |   2016-11-23  |   2016-12-01  
A3      |   01      |   2016-12-03  |   2016-12-08
A4      |   02      |   2016-10-10  |   2016-12-31
A5      |   02      |   2016-12-01  |   2016-12-05

如果我运行这个查询并且CurrentDate是 2016 年 11 月 28 日:

select p.name, d.startdate, d.enddate
from Person p, PersonDate d
where p.pId = d.pId
and d.StartDate = (select max(sl.StartDate)
                   from PersonDate sl
                   where d.pId = s1.pId)

返回的记录有:

name        | startdate     | enddate
-------------------------------------------
Person 1    |   2016-12-03  |   2016-12-08      --> PersonDate Table row A3
Person 2    |   2016-12-01  |   2016-12-05      --> PersonDate Table row A5
-------------------------------------------

根据我试图返回的条件,两条返回的记录都不正确。我明白为什么我得到返回的记录,这是由于在我的子查询中使用 Max() 函数,但我不知道如何编写查询/子查询。

我想要返回的正确记录是(CurrentDate 为 2016-11-28):

name        | startdate     | enddate
-------------------------------------------
Person 1    |   2016-11-23  |   2016-12-01
Person 2    |   2016-10-10  |   2016-12-31
-------------------------------------------
  • PersonDate表行 A2,因为此内部日期范围最接近CurrentDate(条件#2)

  • PersonDate表行 A4,因为内部日期范围 (A5) 尚未到来(条件 #3)

When CurrentDate是 2016 年 12 月 2 日:

name        | startdate     | enddate
---------------------------------------------
Person 1    |   2014-01-08  |   2018-01-08  
Person 2    |   2016-12-01  |   2016-12-05
---------------------------------------------
  • PersonDate表行 A1,因为CurrentDate位于 A2 行和 A3 行内部日期范围之外
  • PersonDate表行 A5,因为CurrentDate在日期范围内

我怎样才能编写一个根据上述条件返回记录的视图?


create table #temp(did varchar(10),pid int,startdate datetime,enddate datetime)

insert into #temp values('A1',01,'2014-01-08','2018-01-08')
insert into #temp values('A2',01,  '2016-11-23'  ,   '2016-12-01'   )
insert into #temp values('A3',01, '2016-12-03'  ,   '2016-12-08'  )
insert into #temp values('A4',02,  '2016-10-10'  ,   '2016-12-31'  )
insert into #temp values('A5',02, '2016-12-01'  ,   '2016-12-05'  )


select b.pid,b.startdate,b.enddate
from
(
select ROW_NUMBER()over(partition by pid order by id desc) as SID , a.*
from
(
select 
ROW_NUMBER()over(partition by pid order by startdate,enddate desc) as ID
, * from #temp 
--to identify whether it is inner or outer
--1 means outer
--2 means inner
)a
where '2016-12-02' between startdate and enddate
--to find date lies in outer or inner range and select the required
)b
where b.SID=1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server:根据条件查找日期与当前日期最接近的记录 的相关文章

  • 获取家庭成员

    假设以下家庭 其构建架构是 create table PersonConn child int parent int insert into PersonConn values 1 2 insert into PersonConn valu
  • 连接两个表的查询的 SQL Server“FOR XML”输出

    我是 SQL Server 中 FOR XML 功能的新手 我正在使用 SQL Server 2012 我有两个表 Word 和 Word Expansion 样本数据 表 字 WordOID Word 1 PIPE 2 WIRE 表 Wo
  • SQL Server 用分隔符分割字符串

    我有一个输入字符串 100 2 3 101 2 1 103 2 3 我想解析它并将其添加到具有 3 列的表中 因此它应该是 f x col1 col2 col3 100 2 3 类似的其他数据以逗号分隔作为记录和 作为列 Thanks ni
  • Scrapy - 如何抓取网站并将数据存储在 Microsoft SQL Server 数据库中?

    我正在尝试从我们公司创建的网站中提取内容 我在 MSSQL Server 中为 Scrapy 数据创建了一个表 我还设置了 Scrapy 并配置了 Python 来抓取和提取网页数据 我的问题是 如何将Scrapy爬取的数据导出到我本地的M
  • 存储过程和权限 - EXECUTE 就足够了吗?

    我有一个 SQL Server 2008 数据库 其中对基础表的所有访问都是通过存储过程完成的 一些存储过程只是从表中选择记录 而其他存储过程则进行 UPDATE INSERT 和 DELETE 如果存储过程更新表 执行存储过程的用户是否也
  • 了解 SSMS 2008 中关系的更新和删除规则

    当我们定义外键约束时 我对 SQL Server 2008 Management Studio 中的更新和删除规则的含义感到困惑 我也没有找到相关的帮助文档 例如F1帮助 这是屏幕快照 如果有人能描述它们的含义并推荐一些相关文档来阅读 我将
  • Amazon RDS for SQL Server 是否支持 SSIS?

    从谷歌搜索中读到一些相互矛盾的答案 不确定答案是是 否还是可能 我觉得读的时候已经很清楚了this http docs aws amazon com AmazonRDS latest UserGuide CHAP SQLServer htm
  • 为什么 SqlClient 在传递 SqlXml 时使用不必要的 XML 转换?

    我有一个关于从 C 代码将 xml 数据类型传递给查询的问题 首先 这是 SQL Server 上的一个表 CREATE TABLE dbo XmlTable id int IDENTITY 1 1 NOT NULL dat xml NOT
  • “RDBMS”附近的语法不正确。当我尝试创建外部数据源时,有人遇到同样的问题吗?

    我使用的是sql server 2017 CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc WITH TYPE RDBMS LOCATION
  • SQL - != 'NULL' 的解释

    我的SSMS代码如下 Select top 50 From FilteredContact Where statuscode 1 and emailaddress1 NULL and telephone1 NULL and address1
  • 可以获取SQL Server中当前执行的存储过程的行号吗?

    几年前 我在 Sybase Delphi 环境中工作 使用 BDE 连接到数据库服务器 我们有一个 Delphi 小应用程序 给定当前正在执行的存储过程的名称 它可以告诉您当前正在执行该存储过程的哪一行 这对于调试似乎挂起的存储过程非常有用
  • Android访问远程SQL数据库

    我可以直接从 Android 程序访问远程 SQL 数据库 在网络服务器上 吗 即简单地打开包含所有必需参数的连接 然后执行 SQL 查询 这是一个私人程序 不对公众开放 仅在指定的手机上可用 因此我不担心第三方获得数据库访问权限 如果是这
  • 如何跨多个表强制执行 CHECK 约束

    我有一个在 Microsoft SQL Server 2012 Express 中记录奶牛繁殖信息的数据库 显然 一头牛只有在出生后才能配种 并且在其一生中可能会配种多次 我需要在我的数据库中强制执行这些约束 我目前已经根据下图安排了一个架
  • 在 SQL 中将数字求小数次幂

    我试图在 MS SQL 中将一系列数字求小数 1 5 次幂 但在应用于负基数时出现 域错误 这应该不是问题 因为我要提升到奇次幂根 此外 我可以在 Excel 中进行计算 谁能评论一下 MS SQL 是否根本不支持将负幂提高到小数根 负基数
  • 插入后,数据库中仅插入“字符串”的一个字符

    Below is my table screenshot Data after insertion C 代码 SqlConnection con new SqlConnection connectionsession Con con Ope
  • 将 SQL Server 与 Dart 结合使用

    我还没有找到很好的答案 所以我想尝试一下得到答案 将 Microsoft SQL Server 与 Dart 结合使用的最佳方式是什么 我需要它能够从基本上任何操作系统 网络和移动设备上使用它 我觉得最好的方法可能是 GraphQL 但我对
  • 将 .MDF SQL Server 数据库与 ASP.NET 结合使用与使用 SQL Server

    我目前正在 ASP NET MVC 中编写一个网站 我的数据库 其中还没有任何数据 只有正确的表 使用 SQL Server 2008 我已将其安装在我的开发计算机上 我使用服务器资源管理器从应用程序连接到数据库 然后使用 LINQ to
  • 如何在实体框架中完全锁定一行

    我正在处理的情况是我们正在处理金钱交易 例如 我有一个用户钱包表 其余额位于该行 UserId Wallet Id Balance 现在 在我们的网站和网络服务中 每次发生特定交易时 我们都需要 检查是否有足够的资金可用于执行该交易 从余额
  • 加密数据库字段的好方法?

    我被要求加密数据库中的各种数据库字段 问题是这些字段在读取后需要解密 我在用着Django and SQL Server 2005 有什么好主意吗 See 在 SQL Server 2005 数据库中使用对称加密 https web arc
  • Sequelize.js 中的自定义或覆盖连接

    我需要使用创建自定义连接条件Sequelize js http sequelizejs com使用 MSSQL 具体来说 我需要加入TableB基于一个COALESCE中的列的值TableA and TableB并最终得到这样的连接条件 L

随机推荐