【发布时间】:2016-03-17 08:53:29
【问题描述】:
您可以在下面看到表格和上下文。
我想从表中的上下文中获取 3 个组,所以我想按ABDC_IDENT 分组,但是当DATE_RANK 订单中断时,正如您在DATE_RANK 11 之后的数据中看到的那样,1,2(因为它是B组)然后它继续为A组排名(顺序是VARIOUS_DATES)。
我想要的是 3 组,第一组是 A 组排名 1 到 11,第二组是 B 排名 1,2,第三组应该是 A 组,但排名从 12 到 21。我希望这个每个人都清楚。
我目前正在试验 UNBOUNDED PRECEDING 和当前行之间的行,欢迎任何想法,也许也可以通过其他方式完成。干杯和谢谢
这是我的小提琴,所以你可以自己轻松地构建它:
CREATE TABLE Table1
(ABDC_IDENT varchar(5), VARIOUS_DATES date, DATE_RANKS int)
;
INSERT INTO Table1
(ABDC_IDENT, VARIOUS_DATES, DATE_RANKS)
VALUES
('A', '31.12.2010', 1),
('A', '31.01.2011', 2),
('A', '28.02.2011', 3),
('A', '31.03.2011', 4),
('A', '29.04.2011', 5),
('A', '31.05.2011', 6),
('A', '30.06.2011', 7),
('A', '29.07.2011', 8),
('A', '31.08.2011', 9),
('A', '30.09.2011', 10),
('A', '31.10.2011', 11),
('B', '30.11.2011', 1),
('B', '30.12.2011', 2),
('A', '31.01.2012', 12),
('A', '29.02.2012', 13),
('A', '30.03.2012', 14),
('A', '30.04.2012', 15),
('A', '31.05.2012', 16),
('A', '29.06.2012', 17),
('A', '31.07.2012', 18),
('A', '31.08.2012', 19),
('A', '28.09.2012', 20),
('A', '31.10.2012', 21)
;
然后将所需的结果插入到另一个表中
Table2
GROUP_ABC | MIN_DATE | MAX_DATE |
A |31.12.2010 | 31.10.2011 |
B |30.11.2011 | 30.12.2011 |
C |31.01.2012 | 31.10.2012 |
【问题讨论】:
-
你能用表格给我们展示一下欲望结果吗?
-
您的 Sybase 版本是否支持窗口函数? Sybase 有很多版本,有的有,有的没有。另外,你为什么在列名中使用反引号?
-
@Juan Carlos Oropeza 我会尽快做的。
-
@Gordon Linoff 小提琴网站自己做到了,它从文本中生成了 ddl ......它在那里工作,所以我没有改变它,也许是我的错
-
进一步澄清,Sybase IQ v.15,4 ...我不需要它是一个窗口函数...我只对最后的输出感兴趣...我只是想窗口函数是最简单/最好的解决方案