안녕하십니까?
오랜만에 문의드리게 되었고 오랜만에 운영되는 사이트 보니 반갑습니다
다름이 아니오라,
WITH T AS (
SELECT '2022-11-23 14:31:08' LOSSTIME, '설비A' ENM, 'ERR1' ERR FROM DUAL
UNION ALL SELECT '2022-11-23 14:31:08', '설비A', 'ERR1' FROM DUAL
UNION ALL SELECT '2022-11-23 14:39:08', '설비A', 'ERR1' FROM DUAL
UNION ALL SELECT '2022-11-23 14:46:08', '설비A', 'ERR1' FROM DUAL
UNION ALL SELECT '2022-11-23 14:51:08', '설비A', 'ERR1' FROM DUAL
UNION ALL SELECT '2022-11-23 14:59:08', '설비A', 'ERR1' FROM DUAL
)
SELECT *
FROM (SELECT LOSSTIME, ENM, ERR, COUNT(LOSSTIME) OVER(PARTITION BY LOSSTIME ORDER BY ERR DESC) NUM FROM T)
WHERE NUM <= 3
AND LOSSTIME < (SELECT '2022-11-23 14:46:08' FROM DUAL)
ORDER BY LOSSTIME , NUM;
1. 조건
- 현재 시간에 조회를 하여 에러가 예를 들어 3개 이상이면 데이터를 뽑고 전송함
- 현재 시간이 14:46분 이라면 조회를 하면 2건이 나옴 이때는 전송하지 아니함
LOSSTIME ENM ERR NUM
2022-11-23 14:31:08 설비A ERR1 1
2022-11-23 14:39:08 설비A ERR1 1
- 만약에 5분후에 조회를 하면 3건이 나와 전송함
LOSSTIME ENM ERR NUM
2022-11-23 14:31:08 설비A ERR1 1
2022-11-23 14:39:08 설비A ERR1 1
2022-11-23 14:46:08 설비A ERR1 1
2. 문제점
2.1 5분후에 다시 조회를 하여 그대로 3건이면 전송하지 않고
2.2 3건 이상이면 또 전송을 해야 하는 문제 입니다
즉, 14시 ~ 15시 사이에 10분간격으로 조회를 해서 3건이상이면 전송
다시 조회시 그대로면 미전송 증가하였으면 전송
어떻게 전시간의 값을 갖고 올수 있으며 위 조건들이 한방 Query로 구현이 가능한지 여쭈어 봅니다
안되면 프로시져도 생각하고 있는데...해본적이 없어서...죄송합니다..
살펴봐 주십시요
|