Teradata (ANSI SQL) 和 Oracle/My SQL 关于 sum(x) over(按 y 顺序分区)有什么区别?
原始表X为:
ID | START_DATE | END_DATE | GRP |
---|---|---|---|
001 | 2017-10-15 | 2018-10-21 | 1 |
001 | 2017-10-15 | 2019-10-21 | 0 |
001 | 2020-05-18 | 2021-05-03 | 1 |
select ID, start_date, end_date,
sum(grp) over(partition by ID order by start_date, end_date) as island
from X
```
In Teradata the result is:
| ID | START_DATE | END_DATE | island |
| -------- | ------------ | -------- |------- |
| 001 | 2017-10-15 |2018-10-21| 2 |
| 001 | 2017-10-15 |2019-10-21| 2 |
| 001 | 2020-05-18 |2021-05-03| 2 |
In Oracle and MySQL the results are:
| ID | START_DATE | END_DATE | island |
| -------- | ------------ | -------- |------- |
| 001 | 2017-10-15 |2018-10-21| 1 |
| 001 | 2017-10-15 |2019-10-21| 1 |
| 001 | 2020-05-18 |2021-05-03| 2 |
Any suggestions to fix the Teradata result? Many thanks !!
Original Table X as :
ID | START_DATE | END_DATE | GRP |
---|---|---|---|
001 | 2017-10-15 | 2018-10-21 | 1 |
001 | 2017-10-15 | 2019-10-21 | 0 |
001 | 2020-05-18 | 2021-05-03 | 1 |
select ID, start_date, end_date,
sum(grp) over(partition by ID order by start_date, end_date) as island
from X
```
In Teradata the result is:
| ID | START_DATE | END_DATE | island |
| -------- | ------------ | -------- |------- |
| 001 | 2017-10-15 |2018-10-21| 2 |
| 001 | 2017-10-15 |2019-10-21| 2 |
| 001 | 2020-05-18 |2021-05-03| 2 |
In Oracle and MySQL the results are:
| ID | START_DATE | END_DATE | island |
| -------- | ------------ | -------- |------- |
| 001 | 2017-10-15 |2018-10-21| 1 |
| 001 | 2017-10-15 |2019-10-21| 1 |
| 001 | 2020-05-18 |2021-05-03| 2 |
Any suggestions to fix the Teradata result? Many thanks !!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论