首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在一天的基础上显示历史数据,而表中的数据则以秒为基础?

如何在一天的基础上显示历史数据,而表中的数据则以秒为基础?
EN

Stack Overflow用户
提问于 2017-10-06 00:24:47
回答 1查看 30关注 0票数 0

嗨,我有一个表的时间戳精度可达秒(表A)和业务要求是显示历史数据的一天,周,月,甚至一年的基础上。数据库= Oracle和后端应用程序是Java引导。

表:

代码语言:javascript
复制
╔════╤══════╤═════════════════════╗
║ id │ data │ created             ║
╠════╪══════╪═════════════════════╣
║ 1  │ 40   │ 2017-10-06 10:00:00 ║
╟────┼──────┼─────────────────────╢
║ 2  │ 30   │ 2017-10-06 23:59:59 ║
╟────┼──────┼─────────────────────╢
║ 3  │ 1000 │ 2017-10-07 12:00:00 ║
╚════╧══════╧═════════════════════╝

抽样预期产出:

代码语言:javascript
复制
╔══════╤════════════╗
║ data │ created    ║
╠══════╪════════════╣
║ 70   │ 2017-10-06 ║
╟──────┼────────────╢
║ 1000 │ 2017-10-07 ║
╚══════╧════════════╝

我可以在这里看到两种选择:

  1. 创建一些其他表(表B)或存储过程,以便通过对表A进行求和而只在表B/存储过程中自动累积数据。
  2. 让后端应用程序用正确的SQL直接从表A查询数据。

如果有更多的选择,谁能建议一下吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-06 01:47:20

这是一个简单的group by。要去掉时间戳的时间部分,可以使用trunc()to_char()

代码语言:javascript
复制
select sum(data) as data,
       trunc(created) as day_created
from the_table
group by trunc(created);

代码语言:javascript
复制
select sum(data) as data,
       to_char(created, 'yyyy-mm-dd') as day_created
from the_table
group by to_char(created, 'yyyy-mm-dd');

在处理其他级别的聚合时,to_char()更灵活,例如每月获取数字:

代码语言:javascript
复制
select sum(data) as data,
       to_char(created, 'yyyy-mm') as month_created
from the_table
group by to_char(created, 'yyyy-mm');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46596593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档