如果 SQL Server 中的日期序列存在间隙,如何查找 MinDate / MaxDate?
我的数据集如下所示,我需要通过按名称和日期列对它们进行分组来生成开始日期(分钟)和结束日期(分钟)。当类型更改时,按逻辑分组应该中断并采用最大日期直到那里。
名称 | 类型 | 日期 |
---|---|---|
A | xx | 1/1/2018 |
A | xx | 1/2/2018 |
A | yy | 1/3/2018 |
A | xx | 1/4/2018 |
A | xx | 1/5/2018 |
A | xx | 1/6/2018 |
输出如下:
名称 | 类型 | 开始日期 | 结束日期 |
---|---|---|---|
A | xx | 1/1/2018 | 1/2/2018 |
A | yy | 2018年1月3日 | 2018年1月3日 |
A | xx | 2018年1月4日 | 2018年1月6日 |
My dataset looks like this and I need to generate the StartDate (Min), EndDate(Min) by grouping them by Name and Date columns. When Type changes, the group by logic should break and take Max date till there.
Name | Type | Date |
---|---|---|
A | xx | 1/1/2018 |
A | xx | 1/2/2018 |
A | yy | 1/3/2018 |
A | xx | 1/4/2018 |
A | xx | 1/5/2018 |
A | xx | 1/6/2018 |
The output would be like:
Name | Type | StartDate | EndDate |
---|---|---|---|
A | xx | 1/1/2018 | 1/2/2018 |
A | yy | 1/3/2018 | 1/3/2018 |
A | xx | 1/4/2018 | 1/6/2018 |
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
下面的方法有点笨拙,但仍能获取所需的输出。存储桶根据日期(日)差异进行分区。
Below approach would be bit clumsy yet fetches the desired output. The buckets are partitioned based on the date (day) difference.
本例中的挑战是通过列
Name
和Type
识别所有目标组,同时考虑到差距。作为一种可能的解决方案,您可以根据按Date
排序的Row_Number
与按Date 排序的
与Row_Number
之间的差异,使用额外的分组表达式按名称、类型分区
。dbfiddle
The challenge in this case is to identify all target groups by the columns
Name
andType
taking into account the gaps. As a possible solution, you can use an additional grouping expression based on the difference betweenRow_Number
ordered byDate
andRow_Number
ordered byDate
withPartion by Name, Type
.dbfiddle
希望这能让你澄清。
Hope this clarify you.