Количество рабочих мест, представленных после каждого часа - PullRequest
1 голос
/ 07 ноября 2019

У меня есть требование, чтобы получить количество заданий, которые выполнялись после каждого часа в Oracle sql.

Я пришел с запросом об урезании даты до ближайшего часа. Я не знаю, как написать запрос, который будет подсчитывать вхождения «Job No» после каждого часа, начиная с полуночи.

Пока это мой вывод, представляющий только три столбца в запросе.

Job No  DateTime            TruncDate
2830161 11/06/2019 00:04:21 11/06/2019 00:00:00
2830162 11/06/2019 00:04:38 11/06/2019 00:00:00
2830163 11/06/2019 00:05:57 11/06/2019 00:00:00
2830164 11/06/2019 00:06:18 11/06/2019 00:00:00
2830168 11/06/2019 01:29:03 11/06/2019 01:00:00
2830169 11/06/2019 01:29:39 11/06/2019 01:00:00
2830170 11/06/2019 01:30:07 11/06/2019 01:00:00
2830175 11/06/2019 01:37:33 11/06/2019 01:00:00
2830186 11/06/2019 02:52:04 11/06/2019 02:00:00
2830193 11/06/2019 03:22:02 11/06/2019 03:00:00
2830194 11/06/2019 03:22:40 11/06/2019 03:00:00
2830199 11/06/2019 03:45:08 11/06/2019 03:00:00
2830201 11/06/2019 04:21:09 11/06/2019 04:00:00
2830202 11/06/2019 04:21:25 11/06/2019 04:00:00
2830203 11/06/2019 04:47:30 11/06/2019 04:00:00
2830204 11/06/2019 04:47:48 11/06/2019 04:00:00
2830205 11/06/2019 07:13:43 11/06/2019 07:00:00
2830206 11/06/2019 07:14:55 11/06/2019 07:00:00
2830207 11/06/2019 07:39:02 11/06/2019 07:00:00
2830211 11/06/2019 07:54:52 11/06/2019 07:00:00
2830212 11/06/2019 08:00:50 11/06/2019 08:00:00
2830213 11/06/2019 08:00:53 11/06/2019 08:00:00
2830214 11/06/2019 08:01:06 11/06/2019 08:00:00


SELECT "Job No", "Submit_Date", "Submit_Time", 
       TO_DATE(TO_CHAR("Submit_Date", 'MM-DD-YYYY') || ' ' 
       || "Submit_Time", 'MM-DD-YYYY HH24:MI:SS') AS Datetime,
       TRUNC(TO_DATE(TO_CHAR("Submit_Date", 'MM-DD-YYYY') || ' ' 
       || "Submit_Time", 'MM-DD-YYYY HH24:MI:SS'), 'HH' ) AS truncDate
  FROM VW_SUBMITTEDJOBS 
 ORDER BY "Submit_Date" DESC;

Я хочу достичь чего-то подобного ...

COUNT("Job No") or (*) 
 FROM VW_SUBMITTEDJOBS 
WHERE TruncDate BETWEEN 11/06/2019 00:00:00 AND 11/06/2019 01:00:00

Я ожидаю 4 в качестве ответа согласно выводу выше, тогда

11/06/2019 01:00:00 AND 11/06/2019 02:00:00, чтобы показать4,

11/06/2019 02:00:00 AND 11/06/2019 03:00:00, чтобы показать 1

и так далее

Ответы [ 3 ]

1 голос
/ 07 ноября 2019

Вы можете напрямую использовать Submit_Date и Submit_Time в предложении WHERE следующим образом:

SELECT
    DATETIME,
    COUNT(1) AS "NUMBER OF JOBS"
FROM
    (
        SELECT
            "Job No",
            TRUNC(TO_DATE(TO_CHAR("Submit_Date", 'MM-DD-YYYY')
                          || ' '
                          || "Submit_Time", 'MM-DD-YYYY HH24:MI:SS'), 'HH') AS DATETIME
        FROM
            VW_SUBMITTEDJOBS
        WHERE
            TO_DATE(TO_CHAR("Submit_Date", 'MM-DD-YYYY')
                    || ' '
                    || "Submit_Time", 'MM-DD-YYYY HH24:MI:SS') 
                        BETWEEN '11/06/2019 00:00:00' AND '11/06/2019 01:00:00'
    )
GROUP BY
    TRUNC(DATETIME, 'HH');
1 голос
/ 07 ноября 2019

Вы можете усечь аргумент HH24:

SELECT TRUNC(Submit_Date,'HH24') as Submit_Date, COUNT(*) as "Count"
  FROM VW_SUBMITTEDJOBS
 GROUP BY TRUNC(Submit_Date,'HH24') 
 ORDER BY Submit_Date DESC;

Демонстрация

или явное форматирование to_char() после применения trunc():

SELECT TO_CHAR(TRUNC(Submit_Date,'HH24'),'YYYY-MM-DD HH24') as "Submit Date", 
       COUNT(*) as "Count"
  FROM VW_SUBMITTEDJOBS
 GROUP BY TO_CHAR(TRUNC(Submit_Date,'HH24'),'YYYY-MM-DD HH24') 
 ORDER BY "Submit Date" DESC;
1 голос
/ 07 ноября 2019

Вы можете усечь столбец datetime в предложении where. Например, чтобы все работы начинались с 1:00 до 2:00:

with vw_submittedjobs(jobno, datetime) AS
(
SELECT 2830161, TO_DATE('11/06/2019 00:04:21','MM/DD/YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 2830162, TO_DATE('11/06/2019 00:04:38','MM/DD/YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 2830163, TO_DATE('11/06/2019 00:05:57','MM/DD/YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 2830164, TO_DATE('11/06/2019 00:06:18','MM/DD/YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 2830168, TO_DATE('11/06/2019 01:29:03','MM/DD/YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 2830169, TO_DATE('11/06/2019 01:29:39','MM/DD/YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 2830170, TO_DATE('11/06/2019 01:30:07','MM/DD/YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 2830175, TO_DATE('11/06/2019 01:37:33','MM/DD/YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 2830186, TO_DATE('11/06/2019 02:52:04','MM/DD/YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 2830193, TO_DATE('11/06/2019 03:22:02','MM/DD/YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 2830194, TO_DATE('11/06/2019 03:22:40','MM/DD/YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 2830199, TO_DATE('11/06/2019 03:45:08','MM/DD/YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 2830201, TO_DATE('11/06/2019 04:21:09','MM/DD/YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 2830202, TO_DATE('11/06/2019 04:21:25','MM/DD/YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 2830203, TO_DATE('11/06/2019 04:47:30','MM/DD/YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 2830204, TO_DATE('11/06/2019 04:47:48','MM/DD/YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 2830205, TO_DATE('11/06/2019 07:13:43','MM/DD/YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 2830206, TO_DATE('11/06/2019 07:14:55','MM/DD/YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 2830207, TO_DATE('11/06/2019 07:39:02','MM/DD/YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 2830211, TO_DATE('11/06/2019 07:54:52','MM/DD/YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 2830212, TO_DATE('11/06/2019 08:00:50','MM/DD/YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 2830213, TO_DATE('11/06/2019 08:00:53','MM/DD/YYYY HH24:MI:SS') FROM DUAL UNION ALL
SELECT 2830214, TO_DATE('11/06/2019 08:01:06','MM/DD/YYYY HH24:MI:SS') FROM DUAL 
)
SELECT 
  COUNT(jobno) job_count
  FROM vw_submittedjobs
  WHERE TO_CHAR(TRUNC(datetime,'HH24'),'MM/DD/YYYY HH24:MI:SS') = '11/06/2019 01:00:00'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...