sql - 按开始和结束日期分组数据
问题描述
我有两个孩子的数据集,他们将根据他们的位置见面。
这是我想要得到的期望输出
我正在尝试在(SQL Server 2016)中编写一个 SQL 查询,使用 RowNumber 为每个彩色方案放置一个唯一的组号,以便我可以在下一个查询中使用 group by 来获取开始和结束日期,但它不起作用
Select DISTINCT [Date], [Visitee Id], [Visitor Id], Group,
ROW_NUMBER() OVER (PARTITION BY [Visitee Id], [Visitor Id], Group ORDER BY [Visitee Id], [date], Group) AS GroupNumber
FROM Table1
解决方案
这是一种差距和孤岛问题。如果您只对连续几天感兴趣,您可以使用row_number()
聚合来处理:
select visiteeid, visitorid, group, min(date), max(date)
from (select t.*,
row_number() over (partition by visiteeid, visitorid, group order by date) as seqnum
from t
) t
group by visiteeid, visitorid, group,
dateadd(day, - seqnum, date);
这个想法是,当日期在每一行上递增 1 时,从日期中减去一个序列是恒定的。剩下的只是聚合。
推荐阅读
- javascript - 更新特定行 react-native
- java - Intellij:更改变量建议背景颜色
- gitlab - 自托管 gitlab 自动部署到 aws ec2 服务器
- reactjs - Apollo 中深度本地状态的 Graphql 查询失败
- azure - 当我从 Azure sdk 2.1 更新到 azure sdk 2.9 时,Azure 云服务项目出现问题
- ios - 内存管理如何在模型类(Swift 或目标 C)中工作
- image - xamarin.forms 中的 SVG 使用
- artificial-intelligence - 基于树搜索的游戏 AI:如何通过稀疏奖励避免 AI“徘徊”/“拖延”?
- python - matplotlib 中标签之间的空间
- java - java 8中的调用方法