第1章 SQL窗口函数 1
1.1 窗口函数的背景 2
1.1.1 窗口函数的描述 2
1.1.2 基于集合与基于迭代/游标的编程 6
1.1.3 窗口函数替代方案的不足之处 11
1.2 使用窗口函数的解决方案简介 16
1.3 窗口函数中的元素 20
1.3.1 分区 21
1.3.2 排序 22
1.3.3 框架 23
1.4 支持窗口函数的查询元素 24
1.4.1 查询逻辑处理 24
1.4.2 支持窗口函数的子句 26
1.4.3 避开限制 29
1.5 潜在的额外筛选器 31
1.6 窗口定义的重复使用 32
1.7 小结 33
第2章 窗口函数详述 34
2.1 窗口聚合函数 34
2.1.1 窗口聚合函数描述 34
2.1.2 支持的窗口元素 35
2.1.3 对进一步筛选的一些想法 51
2.1.4 DISTINCT聚合 53
2.1.5 嵌套聚合 55
2.2 排名函数 60
2.2.1 支持的窗口元素 60
2.2.2 ROW_NUMBER 60
2.2.3 NTILE 65
2.2.4 RANK和DENSE RANK 69
2.3 分布函数 71
2.3.1 支持的窗口元素 71
2.3.2 排名分布函数 71
2.3.3 逆分布函数 74
2.4 偏移函数 77
2.4.1 支持的窗口元素 77
2.4.2 LAG和LEAD 78
2.4.3 FIRSTVALUE、LASTVALUE和NTH VALUE 80
2.5 小结 83
第3章 排序集合函数 84
3.1 假设集合函数 85
3.1.1 RANK 85
3.1.2 DENSE_RANK 87
3.1.3 PERCENT_RANK 88
3.1.4 CUME_DIST 89
3.1.5 通用的解决方法 90
3.2 逆分布函数 93
3.3 偏移函数 97
3.4 字符串连接 102
3.5 小结 103
第4章 窗口函数的优化 104
4.1 样本数据 104
4.2 索引指南 106
4.2.1 POC索引 107
4.2.2 反向扫描 108
4.2.3 列存储索引 111
4.3 排名函数 112
4.3.1 ROW_NUMBER 112
4.3.2 NTILE 114
4.3.3 RANK和DENSE RANK 115
4.4 利用APPLY提高并行度 116
4.5 聚合和偏移函数 119
4.5.1 没有排序和框架 119
4.5.2 有排序和框架 122
4.6 分布函数 133
4.6.1 排名分布函数 133
4.6.2 逆分布函数 134
4.7 小结 137
第5章 利用窗口函数的T-SQL解决方案 138
5.1 虚拟数字辅助表 138
5.2 日期和时间值序列 142
5.3 序列键 143
5.3.1 更新列的值为唯一值 143
5.3.2 数字序列的应用 145
5.4 分页 148
5.5 删除重复 151
5.6 数据透视 154
5.7 每组前N行 157
5.8 模式 160
5.9 统计总和 164
5.9.1 利用窗口函数的基于集合的解决方案 167
5.9.2 利用子查询或联接且基于集合的解决方案 168
5.9.3 基于游标的解决方案 169
5.9.4 基于CLR的解决方案 171
5.9.5 嵌套迭代 173
5.9.6 带变量的多行UPDATE 174
5.9.7 性能基准 176
5.10 最大并发间隔 178
5.10.1 传统的基于集合的解决方案 180
5.10.2 基于游标的解决方案 182
5.10.3 基于窗口函数的解决方案 185
5.10.4 性能基准 187
5.11 包装间隔 188
5.11.1 传统的基于集合的解决方案 191
5.11.2 基于窗口函数的解决方案 192
5.12 数据差距和数据岛 201
5.12.1 数据差距 202
5.12.2 数据岛 204
5.12.3 中位数 210
5.13 条件聚合 213
5.14 层次结构排序 215
5.15 小结 219