SQL – 选择下一个日期查询
发布时间:2020-12-12 08:54:48 所属栏目:MsSql教程 来源:网络整理
导读:我有一个表与许多ID和许多日期与每个ID相关联,甚至几个没有日期的ID.对于每个ID和日期组合,我想选择ID,日期和与该相同ID相关联的下一个最大日期,如果不存在,则选择null作为下一个日期. 样品表: ID Date1 5/1/101 6/1/101 7/1/102 6/15/103 8/15/103 8/15/104
我有一个表与许多ID和许多日期与每个ID相关联,甚至几个没有日期的ID.对于每个ID和日期组合,我想选择ID,日期和与该相同ID相关联的下一个最大日期,如果不存在,则选择null作为下一个日期.
样品表: ID Date 1 5/1/10 1 6/1/10 1 7/1/10 2 6/15/10 3 8/15/10 3 8/15/10 4 4/1/10 4 4/15/10 4 所需输出: ID Date Next_Date 1 5/1/10 6/1/10 1 6/1/10 7/1/10 1 7/1/10 2 6/15/10 3 8/15/10 3 8/15/10 4 4/1/10 4/15/10 4 4/15/10 解决方法SELECT mytable.id,mytable.date,( SELECT MIN(mytablemin.date) FROM mytable AS mytablemin WHERE mytablemin.date > mytable.date AND mytable.id = mytablemin.id ) AS NextDate FROM mytable 这已经在SQL Server 2008 R2上进行了测试(但它应该适用于其他DBMS),并产生以下输出: id date NextDate ----------- ----------------------- ----------------------- 1 2010-05-01 00:00:00.000 2010-06-01 00:00:00.000 1 2010-06-01 00:00:00.000 2010-06-15 00:00:00.000 1 2010-07-01 00:00:00.000 2010-08-15 00:00:00.000 2 2010-06-15 00:00:00.000 2010-07-01 00:00:00.000 3 2010-08-15 00:00:00.000 NULL 3 2010-08-15 00:00:00.000 NULL 4 2010-04-01 00:00:00.000 2010-04-15 00:00:00.000 4 2010-04-15 00:00:00.000 2010-05-01 00:00:00.000 4 NULL NULL 更新1: 没有日期列上的索引,MIN版本的成本为0.0187916,TOP / ORDER BY版本的成本为0.115073,所以MIN版本“更好”. 使用日期列上的索引,它们执行相同. 请注意,这只是测试这9个记录,所以结果可能是(非常)假的… 更新2:结果持有10,000个均匀分布的随机记录. TOP / ORDER BY查询需要很长的时间才能运行100,000个记录,我不得不取消它并放弃. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql-server – 触发更新另一个sql server上的数据
- 数据库设计 – 我应该将哪种数据类型用于IETF语言代码?
- provider:共享内存提供程序,error:0-管道的另一端上无任何
- 【SqlServer】如何实现用一个表中的数据修改另一个表中的数
- SqlServer数据库性能优化详解
- SQlserver 创建函数实现只取某个字段的数字部分
- sql-server – 当SQL Server需要比Datalength更多的字节时,
- 重装SQLServer2008,提示:MsiGetProductInfo 无法检索 Pro
- sql-server-2008 – 使用纬度和经度返回SQL Server 2008中两
- sql-server – 什么是包含有关存储过程参数的信息的SQL Ser