oracle sql开始时间,在Oracle / SQL中进行时间分片(Time slicing in Oracle/SQL)

在Oracle / SQL中进行时间分片(Time slicing in Oracle/SQL)

我有一个包含表示工作单元的行的大型Oracle表,除了其他元数据外,还包括开始时间和结束时间的列。

我需要根据这些数据生成使用图表,给出一些任意的过滤标准和报告时间段。 例如,给我看一张从上周二早上7点开始的24小时内爱丽丝所有工作的图表。 每个DB行将在图形中垂直堆叠。

我可以通过查询所有可能相关的行,使用高级语言执行此操作,将每个行分为1分钟的时间段并绘制结果图。 但是有没有一种有效的方法可以在SQL中进行分片? 或者是否有现成的Oracle技术可以实现这一点?

谢谢!

I have a large-ish Oracle table containing rows representing units of work, with columns for start time and end time in addition to other meta-data.

I need to generate usage graphs from this data, given some arbitrary filtering criteria and a reporting time period. E.g., show me a graph of all of Alice's jobs for the 24-hour period starting last Tuesday at 7:00am. Each DB row will stack vertically in the graph.

I could do this in a high-level language by querying all potentially relevant rows, time slicing each one into 1-minute buckets, and graphing the result. But is there an efficient way to do this time slicing in SQL? Or is there an existing Oracle technology that does this?

Thanks!

原文:https://stackoverflow.com/questions/379556

更新时间:2019-11-25 16:07

最满意答案

在获取数据方面,您可以使用'group by'和' truncate '将数据分割为1分钟的时间间隔。 例如:

SELECT user_name, truncate(event_time, 'YYYYMMDD HH24MI'), count(*)

FROM job_table

WHERE event_time > TO_DATE( some start date time)

AND user_name IN ( list of users to query )

GROUP BY user_name, truncate(event_time, 'YYYYMMDD HH24MI')

这会给你如下的结果(假设在8.00和8.01之间有20行爱丽丝,在8.01和8.02之间有40行):

Alice 2008-12-16 08:00 20

Alice 2008-12-16 08:01 40

In terms of getting the data out, you can use 'group by' and 'truncate' to slice the data into 1 minute intervals. eg:

SELECT user_name, truncate(event_time, 'YYYYMMDD HH24MI'), count(*)

FROM job_table

WHERE event_time > TO_DATE( some start date time)

AND user_name IN ( list of users to query )

GROUP BY user_name, truncate(event_time, 'YYYYMMDD HH24MI')

This will give you results like below (assuming there are 20 rows for alice between 8.00 and 8.01 and 40 rows between 8.01 and 8.02):

Alice 2008-12-16 08:00 20

Alice 2008-12-16 08:01 40

2008-12-19

相关问答

如果“站名”、“条码”、“时间”都是一样的话,可以这么写: with t_temp as (select row_number() over (partition by station_name order by param_name asc) id, t.* from t), t_temp1 as (select * from t_temp where id = 1), t_temp2 as (select * from t_temp where id = 2), t_temp3 as (sel

...

select * from (select adate,iswin,count(1) as c from tb group by adate,iswin) p Pivot(max(c) for iswin in (\胜\,\负\)) as pvt order by adate

在应用程序开发下面,有个SQL PLUS,可以在那里进行数据库的各种操作,比如对系统的管理、用户管理、数据的增删查改、各种对象的建立(表、视图、序列、同义词、存储过程等等),不过这个是纯文本的操作环境,对用户要求较高,也比较繁琐。 最好安装一个第三方的PL SQL工具,比如PLSQL DEVELOPER、TOAD都比较好用。这些都是图形界面,易于操作,对新手来说,绝对比ORACLE自带的SQL PLUS好用百倍,容易上手。 有问题请追问,如满意请采纳。

左外连接用left join,右外连接用right join语句。 比如 Oracle: select * from a, b where a.id=b.id(+) SQL: select * from a left join b on a.id=b.id 反过来a.id(+)=b.id 就是right join

其实没有那么为麻烦,你可以打开ORACLE视图编辑器。 中显示ORACLE语句,想要什么语句你自己试吧! 包括表的一些属性项都可以加上的。

1. 日期和字符转换函数用法(to_date,to_char) select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual; //日期转化为字符串 select to_char(sysdate,'yyyy') as nowYear from dual; //获取时间的年 select to_char(sysdate,'mm') as nowMonth from dual; //获取时间的月 select to_char(

...

在获取数据方面,您可以使用'group by'和' truncate '将数据分割为1分钟的时间间隔。 例如: SELECT user_name, truncate(event_time, 'YYYYMMDD HH24MI'), count(*)

FROM job_table

WHERE event_time > TO_DATE( some start date time)

AND user_name IN ( list of users to query )

GROUP BY user_name

...

你可以使用regex_like WHERE REGEXP_LIKE (CUSTOMER_ADDRESS , '^[A-Z]');

You could use regex_like WHERE REGEXP_LIKE (CUSTOMER_ADDRESS , '^[A-Z]');

如果您管理插入,则不需要使用触发器: CREATE SEQUENCE seq;

CREATE TABLE mycount

(

line NUMBER(10,0)

);

然后,要插入一个值: INSERT INTO mycount(line) VALUES (seq.nextval);

对于图像,您可以使用BLOB来存储任何二进制数据或BFILE来作为BLOB进行或多或少的管理,但数据存储在文件系统上,例如jpg文件。 参考文献: 创建序列参考 。 创建表格参考 。 Oracle®数据库

...

UID * 0用于隐藏优化器中的0。 优化器将使用其统计数据来确定在o.curdate > 0上使用索引扫描是否有意义。 只要优化器知道o.curdate > value它就会这样做。 但是当值未知时(这里因为函数UID将在执行时调用并以某种方式映入值),优化器无法预见可访问的行的百分比,因此选择了最佳访问方法。 示例:您有一个ID为1到100的表。要求ID> 0将导致全表扫描,而要求ID> 99可能会导致索引范围扫描。 当要求ID> 0 + UID * 0突然使优化器对该值视而不见时,它可能选择

...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值