嗨,我有一个表的时间戳精度可达秒(表A)和业务要求是显示历史数据的一天,周,月,甚至一年的基础上。数据库= Oracle和后端应用程序是Java引导。
表:
╔════╤══════╤═════════════════════╗
║ 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 ║
╚════╧══════╧═════════════════════╝抽样预期产出:
╔══════╤════════════╗
║ data │ created ║
╠══════╪════════════╣
║ 70 │ 2017-10-06 ║
╟──────┼────────────╢
║ 1000 │ 2017-10-07 ║
╚══════╧════════════╝我可以在这里看到两种选择:
如果有更多的选择,谁能建议一下吗?
发布于 2017-10-06 01:47:20
这是一个简单的group by。要去掉时间戳的时间部分,可以使用trunc()或to_char()
select sum(data) as data,
trunc(created) as day_created
from the_table
group by trunc(created);或
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()更灵活,例如每月获取数字:
select sum(data) as data,
to_char(created, 'yyyy-mm') as month_created
from the_table
group by to_char(created, 'yyyy-mm');https://stackoverflow.com/questions/46596593
复制相似问题