3.7 组内第一条 / 最后一条

SQL

WITH m AS(
  SELECT *, row_number() OVER(PARTITION BY year(OrderDate),month(OrderDate) 
     ORDER BY OrderDate) r 
  FROM Orders
  WHERE OrderDate>='2021-01-01')
SELECT * 
FROM m 
WHERE r=1

SPL

A
1 >st=date(“2021-01-01”), start=days@o(st)
2 =file(“Orders_Time.ctx”).open().cursor(;OrderDate>=start)
3 =A2.groups@ob(month@y(OrderDate):monthes;top@1(1,0)).(#1)
4 =A3.run(OrderDate=date@o(OrderDate))

A3 取每组第一条记录。top(1,0) 第一个参数表示取几条,第二个参数表示按这个参数排序取排在前面的 n 个;这里第一个参数用 1,表示只取一条记录;第二个参数用常数表示不用排序,所以最后就是分组后从原序集合中取第 1 条记录


SQL

WITH m AS(
    SELECT *,year(OrderDate) years,month(OrderDate) months, 
      row_number() OVER(PARTITION BY year(OrderDate),month(OrderDate) 
        ORDER BY OrderDate) r 
    FROM Orders
    WHERE OrderDate>='2021-01-01'),
    m1 AS(SELECT years,months,max(r) r FROM m GROUP BY years,months)
SELECT * 
FROM m,m1
WHERE m.r=m1.r and m.years=m1.years and m.months=m1.months

SPL

A
1 >st=date(“2021-01-01”), start=days@o(st)
2 =file(“Orders_Time.ctx”).open().cursor(;OrderDate>=start)
3 =A2.groups@ob(month@y(OrderDate):monthes;top@1(-1,0)).(#1)
4 =A3.run(OrderDate=date@o(OrderDate))

A3 取每组最后一条记录。top(-1,0) 第一个参数用负数,表示按第二个参数排序后从末尾取 n 个


SQL

WITH m AS(
    SELECT *, row_number() OVER(PARTITION BY CustomerID ORDER BY OrderDate) r 
    FROM Orders
    WHERE OrderDate>='2021-01-01')
SELECT month(OrderDate) AS Months,count(*) Num
FROM m 
WHERE r=1
GROUP BY month(OrderDate)

SPL

A
1 >st=date(“2021-01-01”), start=days@o(st)
2 =file(“Orders_Account.ctx”).open().cursor(;OrderDate>=start)
3 =A2.group@sb(CustomerID;top@1(1,0)).(#1)
4 =A3.groups(month(OrderDate):Months;count(1):Num)

还可以用 group@1() 来写

A
3 =A2.group@1(CustomerID)

SQL

WITH m AS(
    SELECT *,row_number() OVER(PARTITION BY CustomerID ORDER BY OrderDate) r 
    FROM Orders
    WHERE OrderDate>='2022-01-01'),
    m1 AS(SELECT CustomerID,max(r) r FROM m GROUP BY CustomerID)
SELECT month(m.OrderDate) AS Months,count(*) Num
FROM m,m1
WHERE m.r=m1.r and m.CustomerID=m1.CustomerID
GROUP BY month(m.OrderDate)

SPL

A
1 >st=date(“2022-01-01”), start=days@o(st)
2 =file(“Orders_Account.ctx”).open().cursor(;OrderDate>=start)
3 =A2.group@sb(CustomerID;top@1(-1,0)).(#1)
4 =A3.groups(month(OrderDate):Months;count(1):Num)

以下是广告时间

对润乾产品感兴趣的小伙伴,一定要知道软件还能这样卖哟性价比还不过瘾? 欢迎加入好多乾计划。
这里可以低价购买软件产品,让已经亲民的价格更加便宜!
这里可以销售产品获取佣金,赚满钱包成为土豪不再是梦!
这里还可以推荐分享抢红包,每次都是好几块钱的巨款哟!
来吧,现在就加入,拿起手机扫码,开始乾包之旅



嗯,还不太了解好多乾?
猛戳这里
玩转好多乾