SQL – 选择下一个日期查询
发布时间:2020-05-23 06:00:41 所属栏目: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
|
我有一个表与许多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个记录,我不得不取消它并放弃. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
