数据库名称:oracle sql
数据库版本:
内容/问题描述:
主要问题有二
一 字段一 时间区间以 当日每小时 做间隔,不知道有没有时间函数可以处理?
目前想到 以 CASE 作条件输出 ; WITH 做虚拟表格 查询 ;
制作 VIEW 观视表 (和WITH 一样)
二 达成率希望做个别统计 EX: 07:00 产量/100 ; 08:00 产量/50
主要卡在问题一的时间区隔处理, 没有其他资料表有相关字段可以做 JOINT
或 子查询
请大家帮帮忙
资料表 G_SN_TRAVEL 字段 OUT_PROCESS_TIME (DATE 机台过站时间戳记)
希望输出查询统计表如下
字段一 字段二 字段三
CLOCK_TIME QTY(产量) RATE(达成率)
07:00 XXX XX %
08:00 XXX XX %
09:00 XXX XX %
===========================================================================
自己的文章自己回不符版规就砍吧!
感谢 hwChang 大的提醒 提供问题的完整解答回馈给同样是新手的大家
WITH
SUM_DATE_QTY(TIME_CLOCK,QTY) AS
(
SELECT
TO_CHAR(A.OUT_PROCESS_TIME,'HH24'),
COUNT(A.OUT_PROCESS_TIME)
FROM SAJET.G_SN_TRAVEL A WHERE A.PROCESS_ID = '100032' AND
to_char(A.OUT_PROCESS_TIME,'YYYYMMDD') = TO_CHAR(SYSDATE,'YYYYMMDD')
GROUP BY TO_CHAR(A.OUT_PROCESS_TIME,'HH24') ORDER BY
TO_CHAR(A.OUT_PROCESS_TIME,'HH24') ASC
)
SELECT
TIME_CLOCK || ':00~59' "TIME_CORD", QTY,
(CASE TIME_CLOCK
WHEN '07' THEN ROUND((QTY/120)*100,2)
WHEN '08' THEN ROUND((QTY/100)*100,2)
WHEN '09' THEN ROUND((QTY/120)*100,2)
WHEN '10' THEN ROUND((QTY/100)*100,2)
WHEN '11' THEN ROUND((QTY/120)*100,2)
WHEN '12' THEN ROUND((QTY/60)*100,2)
WHEN '13' THEN ROUND((QTY/120)*100,2)
WHEN '14' THEN ROUND((QTY/120)*100,2)
WHEN '15' THEN ROUND((QTY/100)*100,2)
WHEN '16' THEN ROUND((QTY/120)*100,2)
WHEN '17' THEN ROUND((QTY/60)*100,2)
WHEN '18' THEN ROUND((QTY/120)*100,2)
WHEN '19' THEN ROUND((QTY/120)*100,2)
WHEN '20' THEN ROUND((QTY/120)*100,2)
END)||'%' "RATE"
FROM SUM_DATE_QTY