阿里云
发表主题 回复主题
  • 690阅读
  • 9回复

【讨论】如何实现类窗口功能

级别: 小白
发帖
0
云币
-4
表名seg,表结构很简单:

date  日期型

id 字符型


    date    | id------------+--------2014-04-26 | A2014-05-03 | B2014-05-10 | C2014-05-17 | D2014-05-24 | E2014-05-31 | F

期望的输出,假设rollup 2周

    date    | id------------+--------2014-04-26 | A2014-05-03 | A2014-05-03 | B2014-05-10 | B2014-05-10 | C2014-05-17 | C2014-05-17 | D2014-05-24 | D2014-05-24 | E2014-05-31 | E2014-05-31 | F



需要查询结果类似于roll up 任意周,比如rollup 2周,3周,4周。

最简单的方法就是写多个select查询,但是希望能用一条SQL仅做一次表扫描,运用类似rollup function 的聚集函数  avg(col1) over (partition BY term ORDER BY date RANGE BETWEEN 77 PRECEDING AND current row)来实现。


请各位赐教【讨论】如何实现类窗口功能-ios qq讨论组头像实现


下面是在我的实验环境的测试,最郁闷的是可以sum,avg,但是如果只想把值取出来做成列表就不行,报错,说不支持。


dev=# select * from test.test order by 1,2;

    date    | id | cnt

------------+----+-----

2014-04-26 | A  |   1

2014-05-03 | B  |   1

2014-05-10 | C  |   1

2014-05-17 | D  |   1

2014-05-24 | E  |   1

2014-05-31 | F  |   1

(6 rows)


dev=# select date,sum(cnt) over(order by date RANGE BETWEEN 14 PRECEDING AND current row) from test.test;

    date    | sum

------------+-----

2014-04-26 |   1

2014-05-03 |   2

2014-05-10 |   3

2014-05-17 |   3

2014-05-24 |   3

2014-05-31 |   3

(6 rows)


Time: 4.289 ms

dev=# select date,sum(cnt) over(order by date RANGE BETWEEN 7 PRECEDING AND current row) from test.test;

    date    | sum

------------+-----

2014-04-26 |   1

2014-05-03 |   2

2014-05-10 |   2

2014-05-17 |   2

2014-05-24 |   2

2014-05-31 |   2

(6 rows)


Time: 4.195 ms



dev=# select date,string_agg(id) over(order by date RANGE BETWEEN 7 PRECEDING AND current row) from test.test;

ERROR:  aggregate functions with no prelimfn or invprelimfn are not yet supported as window functions





如何, 实现, date, 字符, 查询, 如何, 实现, date, 字符, 查询






级别: *
发帖
*
云币
*




我写了一个类似的,不过因为数据库是Greenplum(基于PostgreSQL 8.3),所以没有listagg,但是array_agg是类似listagg的函数。所以想看一下oracle里边实现的SQL什么样,因为基本的SQL都差不多


select date, array_agg(id) over(ORDER BY date RANGE BETWEEN 7 PRECEDING AND current row) from test;


ERROR:  aggregate functions with no prelimfn or invprelimfn are not yet supported as window functions

级别: *
发帖
*
云币
*




不懂gp

你可以参考管道函数来实现,这是我早年咨询的一个帖子,供你参考

http://www.itpub.net/thread-437432-1-1.html
级别: *
发帖
*
云币
*




谢谢帮忙顶贴【讨论】如何实现类窗口功能-jquery实现弹出窗口
级别: *
发帖
*
云币
*


WITH t AS (

SELECT DATE '2014-04-26' dt,'A' id FROM DUAL

UNION ALL SELECT DATE '2014-05-03' dt,'B' id FROM DUAL

UNION ALL SELECT DATE '2014-05-10' dt,'C' id FROM DUAL

UNION ALL SELECT DATE '2014-05-17' dt,'D' id FROM DUAL

UNION ALL SELECT DATE '2014-05-24' dt,'E' id FROM DUAL

UNION ALL SELECT DATE '2014-05-31' dt,'F' id FROM DUAL

)

SELECT DISTINCT t1.dt,t2.id

  FROM t t1,t t2

WHERE t2.dt BETWEEN t1.dt-1*7 AND t1.dt  ------- 一周

ORDER BY 1,2

;

级别: *
发帖
*
云币
*


现在老的id很少见了,




有钱就是任性

级别: *
发帖
*
云币
*


这个?

WITH T AS (

SELECT TO_CHAR(DATE'2014-04-26' + (LEVEL-1)*7,'YYYY-MM-DD')  DT

       ,CHR(64+LEVEL) ID  

FROM DUAL

CONNECT BY LEVEL <= 6

)

SELECT TO_CHAR(TO_DATE(T.DT,'YYYY-MM-DD')+(LEVEL-1)*7,'YYYY-MM-DD') DT  

       ,T.ID

FROM   T

CONNECT BY LEVEL <= 2 -- 2周

AND T.ID = PRIOR T.ID AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL ;


DT         ID

---------- ----

2014-04-26 A

2014-05-03 A

2014-05-03 B

2014-05-10 B

2014-05-10 C

2014-05-17 C

2014-05-17 D

2014-05-24 D

2014-05-24 E

2014-05-31 E

2014-05-31 F

2014-06-07 F
级别: *
发帖
*
云币
*





看我的数据。。。【讨论】如何实现类窗口功能-qt实现窗口滑动效果 另外我又更新了一下主贴,贴了我遇到的错误信息。



恩,分析函数需要用到sum,avg之类的,而我只想简单的选择出这些行的这一列数据,貌似不行啊?


小鸟给写个简单例子瞅瞅呗


级别: *
发帖
*
云币
*


拆也简单,可参考此贴 http://www.itpub.net/forum.php?m ... %3D28%26typeid%3D28

级别: *
发帖
*
云币
*


huang,稀客呀 【讨论】如何实现类窗口功能-android 多窗口实现


你的描述跟你的数据对不上,你想做的不是rollup,应该就是分析函数能搞定

分析函数的范围有range和rows两种表示方法,你的情况应该用range,时间范围用interval来表示,例如  date range between interval '7' days preceding and current rows,分析函数选listagg,得到类似如下数据


    date    | ids

------------+--------

2014-04-26 | A

2014-05-03 | A,B

2014-05-10 | B,C


然后再拆开就行
发表主题 回复主题
« 返回列表
«12345678910»
共10页
上一主题下一主题

限100 字节
批量上传需要先选择文件,再选择上传
 
验证问题: ECS是阿里云提供的什么服务? 正确答案:云服务器
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)

      版权声明

      开发者论坛为你提供“【讨论】如何实现类窗口功能”的内容,论坛中还有更多关于 select类range函数 的内容供你使用,该内容是网友上传,与开发者论坛无关,如果需要删除请联系zixun-group@service.aliyun.com,工作人员会在5个工作日内回复您。