2.7 每组第一 / 最后一条记录
SQL
WITH m AS(
SELECT *, row_number() OVER(PARTITION BY year(OrderDate),month(OrderDate)) r
FROM Orders
WHERE Amount>35500)
SELECT *
FROM m
WHERE r=1
SPL
A | |
---|---|
1 | =file(“Orders.ctx”).open().cursor@x(;Amount>35500) |
2 | =A1.groups(month@y(OrderDate):monthes;top(1;0) :tmp).conj(tmp) |
3 | =A2.run(OrderDate=date@o(OrderDate)) |
A2 top(1;0) 第二个参数用常数(一般用 0),表示返回每组第一条记录,如果要返回最后一条记录,则用 top(-1;0) 即可
不太理解 groups 的 @b 这个选项,等同于 group.new()?另外,像 T.group().new(c1,c2) 的时候为什么可以直接引用 T 的字段名(c1,c2)呢?是 ~.c1 的简化写法?
groups@b 就是结果集中不生成分组键,现在内部是用 groups.new 实现的,也不会因为少生成字段而变快,所以打算取消这个选项了。
后一个说法是对的,group.new(…)时,…对应的是当前分组子集,~.c1 相当于 ~(1).c1,所以可以用。