문제

나는 다른 메타 데이터 외에 시작 시간과 종료 시간을위한 열이있는 작업 단위를 나타내는 행이 포함 된 큰 오라클 테이블을 가지고 있습니다.

임의의 필터링 기준과보고 기간이 주어지면이 데이터에서 사용 그래프를 생성해야합니다. 예를 들어, 지난 화요일 오전 7시에 24 시간 동안 Alice의 모든 일자리를 모두 보여주세요. 각 DB 행은 그래프에 수직으로 쌓입니다.

잠재적으로 관련된 모든 행을 쿼리하고 각 행을 1 분 버킷으로 썰고 결과를 그래프로 쿼리하여 고급 언어 로이 작업을 수행 할 수 있습니다. 그러나 SQL 에서이 시간을 슬라이싱하는 효율적인 방법이 있습니까? 아니면이를 수행하는 기존 Oracle 기술이 있습니까?

감사!

도움이 되었습니까?

해결책

데이터를 얻는 측면에서 '그룹 by'및 ''를 사용할 수 있습니다.잘라'데이터를 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 사이의 Alice의 경우 20 개의 행이 8.01에서 8.02 사이에 있다고 가정 함).

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