我有包含表示的工作单元的行,与开始时间和结束时间列的肥胖型Oracle表除了其他元数据。

我需要从该数据生成使用情况的图表,给定的一些任意的过滤标准和报告时间段。例如,让我知道Alice的工作的24小时内,上周二开始的图表7:00。各DB行将在图形垂直堆叠。

我可以通过查询所有可能相关的行中,时间分片每一个到1分钟的桶,和制图的结果做在一个高级语言。但有一个有效的方式做到在SQL这个时间分片?还是有现有的Oracle技术,做到这一点?

谢谢!

有帮助吗?

解决方案

在获取数据出的方面,则可以“按组”使用和“截断”到数据切成每隔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和8.01和8.02之间40行之间的行20为爱丽丝):

Alice  2008-12-16 08:00   20
Alice  2008-12-16 08:01   40

其他提示

您最好的选择是有一个表(一个临时实时生成将罚款如果时间片是动态的),然后加入针对该

这应该这样做相当好。它会击穿到分钟(一天的1/1440)。

SELECT 
  to_char(Times.time,'hh24:mi'),
  count(*)   
FROM   
  (SELECT
     time
   FROM  
     dual
   WHERE 
     1=2 
   MODEL 
     dimension by ( 0 as key )
     measures     ( sysdate -1 as time )
     rules upsert ( time[ for key from 0 to 1 increment (1/1440) ] = sysdate-1 + cv(key)) ) Times,
  job_table
WHERE 
  begintime <= Times.time 
AND 
  endtime > Times.time 
AND
  user_name = 'Alice'
GROUP BY 
  Times.time 
ORDER BY
  Times.time

我敢肯定有一个更快的方法来做到这一点,但是这是我能拿出最好的。 希望这有助于。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top