1

過去 1 時間に起動されたプロセスの平均所要時間、名前、および ID を並べ替え、15 分ごとに並べ替えてグループ化したい

ここに私のテーブルがあります:

処理する

  • ID
  • 名前
  • タイプ

プロセス実行

  • ID
  • プロセス ID
  • 開始日
  • 日付終了

ここに私のSQLクエリがあります:

WITH tps AS (
       SELECT sysdate-1/24,trunc(TO_DATE((trunc(sysdate,'MI')-MOD(TO_CHAR(sysdate, 'MI'),15)/(24*60))-1/24) + (level) / 96, 'mi') AS DATEREF
       FROM dual
       CONNECT BY level <= 96 * (TO_DATE(SYSDATE) - TO_DATE(((trunc(sysdate,'MI')-MOD(TO_CHAR(sysdate, 'MI'),15)/(24*60))-1/24)-1/24))
    ),
da AS (
        SELECT p.id as Id, p.Name as Nom,trunc(pRun.DateStart,'MI') as dateStart, AVG(pRun.DATEEND - pRun.DATESTART)*1440 as VAL
        FROM process p
        JOIN processrun pRun ON pRun.processid = p.id
        WHERE trunc(pRun.DateStart,'MI') BETWEEN trunc(SYSDATE-1/24,'MI') AND trunc(SYSDATE,'MI')
        AND p.Id = 92
   )
SELECT da.Id, da.Nom, da.VAL, da.dateStart, tps.dateref
FROM tps
LEFT JOIN da ON da.dateStart BETWEEN tps.dateref AND tps.dateref-15/1440
GROUP BY tps.dateref
ORDER BY da.dateStart, da.Nom ASC

これにより、次の結果が得られます。

SELECT da.Id, da.Nom, da.VAL, da.dateStart, tps.dateref
ERROR at line 13:
ORA-00979: not a GROUP BY expression

(*インジケータが の下にある場合da.Id)

WITHこれを正しく行っていないことはわかっていますが、結果を 10 分ごとにグループ化したいのですが、その節でそれを修正する方法がよくわかりません。通常、私は を使用しますがGROUP BY tps.dateref、機能していません。

助けてくれてありがとう!


とった!myGROUP BYのせいで、 my は false でしたAVG()AVG()私は最後の間に私のものを選択するだけでそれを修正する方法を見つけましたSELECTここに私の今のクエリがあります:

WITH tps AS (
   SELECT trunc(TO_DATE((trunc(sysdate,'MI')-MOD(TO_CHAR(sysdate, 'MI'),15)/(24*60))-1/24) + (level) / 96, 'mi') AS DATEREF
   FROM dual
   CONNECT BY level <= 96 * (TO_DATE(SYSDATE) - TO_DATE(((trunc(sysdate,'MI')-MOD(TO_CHAR(sysdate, 'MI'),15)/(24*60))-1/24)-1/24))
),
da AS (
    SELECT p.id as Id, p.Name as Nom,trunc(pRun.DateStart,'MI') as dateStart, pRun.DATEEND - pRun.DATESTART as VAL
    FROM process p
    JOIN processrun pRun ON pRun.processid = p.id
    WHERE trunc(pRun.DateStart,'MI') BETWEEN  trunc(SYSDATE-1/24,'MI') AND  trunc(SYSDATE,'MI')
    AND p.Id = 92
 )
SELECT da.Id,da.Nom, AVG(da.VAL)*1440,tps.dateref
FROM tps
LEFT JOIN da ON da.dateStart BETWEEN tps.dateref-15/1440 AND tps.dateref
GROUP BY da.Id, da.Nom, tps.dateref
ORDER BY tps.dateref, da.Nom ASC
4

0 に答える 0