2016-06-14 1 views
1

存在ヌル、0かいくつかの有益な情報を返しますが、十分ではないので、彼が要求したかなり積み重なったグラフに入れることができます。これを達成するのに十分なデータを得るためには、緊急性がゼロで日数もゼロである必要があります。その後、データをExcelの表に変換してグラフを作成できます。戻り値さえあれば、私はすぐに私たちの私は以下のコードを持っている</p> <p>のMySQL 5.5で実行されて、私はGLPIを使用していますヘルプデスクおよびそれに関するデータをつかむことができるようにいくつかのレポートを作成したい

現在のクエリ:

SELECT DATE_FORMAT(date,'%d/%m/%Y') AS Date,Urgency,COUNT(*) as Tickets 
FROM glpi.glpi_tickets 
WHERE month(date)=month(NOW()) 
GROUP BY urgency ORDER BY date,urgency ASC; 

これが返されますように

# Date, Urgency, Tickets 
'07/06/2016', '1', '0' 
'07/06/2016', '2', '0' 
'07/06/2016', '3', '10' 
'07/06/2016', '4', '0' 
'07/06/2016', '5', '0' 
'08/06/2016', '1', '0' 
'08/06/2016', '2', '0' 
'08/06/2016', '3', '0' 
'08/06/2016', '4', '0' 
'08/06/2016', '5', '0' 
... 
'14/06/2016', '1', '1' 
'14/06/2016', '2', '0' 
'14/06/2016', '3', '0' 
'14/06/2016', '4', '0' 
'14/06/2016', '5', '1' 

をと:私は理想的には、以下のように表示するのと同じよう

# Date, Urgency, Tickets 
'07/06/2016', '3', '10' 
'10/06/2016', '2', '1' 
'14/06/2016', '1', '1' 
'14/06/2016', '5', '1' 

を。

私はSQL(自己教示)のハングを取得しているので、すべての助けが大変高く評価されています。

EDIT:スキーマが追加され、私はその列で、あなただけのグループので、あなたのクエリはurgencyごとに1行を生成http://sqlfiddle.com/#!9/715c7

+2

の可能性のある重複[範囲内の欠落している日付を埋めるためにどのようにMySQLの?](http://stackoverflow.com/questions/3538858/mysql-how-to-fill-missing-dates-in-range) – Shadow

+0

私はちょうどあなたが緊急リストと日付の完全なリストを取得するためにデカルトの結合を生成する必要があることを追加します。 – Shadow

+0

あなたのスキーマを投稿するか、sqlfiddle.comで作成する – CiroRa

答えて

0

これは私がやったことであり、私はそれが欲しい方法でデータを供給しているようです。

私はにデータを格納するための新しいテーブルを作成し、すべての最初に:その後、私はデータを収集し、移入するストアドプロシージャを建て

CREATE TABLE glpi_plugin_ns_ticketstats 
    (
    id INT(11), 
    daterun date, 
    timerun time, 
    totaltickets INT(11), 
    verylow INT(11), 
    low INT(11), 
    med INT(11), 
    high INT(11), 
    veryhigh INT(11)); 

USE `glpi`; 
DROP procedure IF EXISTS `Daily_Ticket_Stats`; 

DELIMITER $$ 
USE `glpi`$$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `Daily_Ticket_Stats`() 
BEGIN 
declare todayd date; 
## Declaring the variable for the daterun column ## 
declare todayt time; 
## Declaring the variable for the timerun column ## 
declare totalt int(11); 
## Declaring the variable for totaltickets column ## 
declare vlow int (11); 
## Declaring the variable for verylow column ## 
declare low int(11); 
## Declaring the variable for low column ## 
declare med int(11); 
## Declaring the variable for med column ## 
declare high int (11); 
## Declaring the variable for high column ## 
declare vhigh int(11); 
## Declaring the variable for veryhigh column ## 
    set todayd = CURDATE(); 
    ## Set date to today ## 
    set todayt = CURTIME(); 
    ## Set time to now ## 
    set totalt = (SELECT COUNT(*) as ttickets 
     FROM glpi.glpi_tickets 
    WHERE day(date)=day(NOW())); 
    ## This has set the total for the total tickets variable ## 
    set vlow = (SELECT COUNT(*) as vltickets 
     FROM glpi.glpi_tickets 
    WHERE day(date)=day(NOW()) 
     AND urgency = '1'); 
    ## This has set the total for the very low urgency tickets variable ## 
    set low = (SELECT COUNT(*) as ltickets 
     FROM glpi.glpi_tickets 
    WHERE day(date)=day(NOW()) 
     AND urgency = '2'); 
    ## This has set the total for the low urgency tickets variable ## 
    set med = (SELECT COUNT(*) as mtickets 
     FROM glpi.glpi_tickets 
    WHERE day(date)=day(NOW()) 
     AND urgency = '3'); 
    ## This has set the total for the medium urgency tickets variable ## 
    set high = (SELECT COUNT(*) as htickets 
     FROM glpi.glpi_tickets 
    WHERE day(date)=day(NOW()) 
     AND urgency = '4'); 
    ## This has set the total for the high urgency tickets variable ## 
    set vhigh = (SELECT COUNT(*) as vhtickets 
     FROM glpi.glpi_tickets 
    WHERE day(date)=day(NOW()) 
     AND urgency = '5'); 

IF EXISTS(
    SELECT * 
    FROM glpi.glpi_plugin_ns_ticketstats 
    WHERE daterun = CURDATE()) 
    THEN 
BEGIN 
    UPDATE glpi.glpi_plugin_ns_ticketstats 
SET 
    timerun = CURTIME(), 
    totaltickets = totalt, 
    verylow = vlow, 
    low = low, 
    med = med, 
    high = high, 
    veryhigh = vhigh 
WHERE 
    daterun = CURDATE(); 
END; 
ELSE 
INSERT INTO glpi.glpi_plugin_ns_ticketstats VALUES (NULL,todayd,todayt,totalt,vlow,low,med,high,vhigh); 
END IF; 
END 
#$$ 

DELIMITER ; 

私は、この手順を設定します1時間ごとに実行するようにしてください。マネージャーがその日にそれらを参照したい場合は、統計情報が最新のものになります(私はこれをmysqlサーバー端末に直接入力しました):

29分は、私がそれを得ることができるように、時間に近いところで走りたいからです。

これは今(私は月の開始からエントリを持っていたので、第一、6月16日から偽装されたエントリを)私はExcelで積み重ねられたグラフを作成することを可能にする形式で素敵なデータを出力します

# id, daterun, timerun, totaltickets, verylow, low, med, high, veryhigh 
'1', '2016-06-01', '23:00:00', '0', '0', '0', '0', '0', '0' 
'2', '2016-06-02', '23:00:00', '0', '0', '0', '0', '0', '0' 
'3', '2016-06-03', '23:00:00', '0', '0', '0', '0', '0', '0' 
'4', '2016-06-04', '23:00:00', '0', '0', '0', '0', '0', '0' 
'5', '2016-06-05', '23:00:00', '0', '0', '0', '0', '0', '0' 
'6', '2016-06-06', '23:00:00', '0', '0', '0', '0', '0', '0' 
'7', '2016-06-07', '23:00:00', '0', '0', '0', '0', '0', '0' 
'8', '2016-06-08', '23:00:00', '0', '0', '0', '0', '0', '0' 
'9', '2016-06-09', '23:00:00', '0', '0', '0', '0', '0', '0' 
'10', '2016-06-10', '23:00:00', '0', '0', '0', '0', '0', '0' 
'11', '2016-06-11', '23:00:00', '0', '0', '0', '0', '0', '0' 
'12', '2016-06-12', '23:00:00', '0', '0', '0', '0', '0', '0' 
'13', '2016-06-13', '23:00:00', '0', '0', '0', '0', '0', '0' 
'14', '2016-06-14', '23:00:00', '0', '0', '0', '0', '0', '0' 
'15', '2016-06-15', '23:00:00', '0', '0', '0', '0', '0', '0' 
'16', '2016-06-16', '23:00:00', '0', '0', '0', '0', '0', '0' 
'17', '2016-06-17', '12:31:22', '4', '1', '0', '0', '0', '3' 

これは、その後することができます

select * from glpi.glpi_plugin_ns_ticketstats 
where month(daterun)=month(NOW()) 

私は誰もが彼らができる、それを使用したいので、もし、ここではこれを残して、あなたの時間に感謝みんなと:)

をお手伝いします:私は selectので、私は唯一のExcelにインポートし、現在の月を取得を行います

iFr4g

1

これは、あなたが求めていたものだと思う(それが動作願っています)。日付と緊急度ごとに異なる結果を表示するには、GROUP BYを変更する必要があります。

SELECT 
    DATE_FORMAT(date,'%d/%m/%Y') AS Date, 
    Urgency, 
    COUNT(*) as Tickets 
FROM 
    glpi.glpi_tickets 
WHERE 
    month(date)=month(NOW()) 
GROUP BY 
    DATE(date), 
    urgency 
ORDER BY 
    date, urgency ASC; 
+0

閉じるが、日付または緊急性の参照がない日付の緊急度の統計を取得する必要があります。私のスキーマはこちらhttp://sqlfiddle.com/#!9/715c7 – iFr4g

0

私はこれがあなたが探しているものだと思います。私はスキーマを持っていませんでしたが、私はクエリを書くことを試みました。私はこれがあなたが探しているものだと思います。 (日付のデータがない場合、唯一欠けているレコードは、あるそれはあなたがしたいかのようなレポートを生成する必要があります。私が編集した、SQLを確認してください。)

select DATE_FORMAT(dummy.date,'%d/%m/%Y') Date, dummy.Urgency, ifnull(main.Tickets, 0) Tickets from 
(select * from 
(select distinct date(date) date from glpi_tickets 
    WHERE month(date)=month(NOW())) dates 
cross join 
(select distinct Urgency from glpi_tickets) urgency 
order by Date, Urgency) dummy 
left join 
(SELECT date(date) date, Urgency, COUNT(*) as Tickets 
FROM glpi_tickets 
WHERE month(date)=month(NOW()) 
GROUP BY date(date), Urgency 
ORDER BY date(date), Urgency) main 
on dummy.date = main.date 
and dummy.Urgency = main.Urgency 
order by dummy.date asc, Urgency asc 

私はSQL以下役立つと思いますあなたの目的、私は少しの助けをhereから取った。大きなデータのクエリを最適化する必要があります。

select DATE_FORMAT(dummy.date,'%d/%m/%Y') Date, dummy.Urgency, ifnull(main.Tickets, 0) Tickets from 
(select * from 
(SELECT date_field date 
FROM 
(SELECT 
     MAKEDATE(YEAR(NOW()),1) + 
     INTERVAL (MONTH(NOW())-1) MONTH + 
     INTERVAL daynum DAY date_field 
    FROM 
    (SELECT t*10+u daynum 
     FROM 
      (SELECT 0 t UNION SELECT 1 UNION SELECT 2 UNION SELECT 3) A, 
      (SELECT 0 u UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 
      UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 
      UNION SELECT 8 UNION SELECT 9) B 
     ORDER BY daynum 
    ) AA 
) AAA 
WHERE MONTH(date_field) = MONTH(NOW()) 
and date_field >= (select min(date(date)) from glpi_tickets WHERE month(date)=month(NOW())) 
and date_field <= (select max(date(date)) from glpi_tickets WHERE month(date)=month(NOW()))) dates 
cross join 
(select distinct Urgency from glpi_tickets) urgency 
order by date, Urgency) dummy 
left join 
(SELECT date(date) date, Urgency, COUNT(*) as Tickets 
FROM glpi_tickets 
WHERE month(date)=month(NOW()) 
GROUP BY date(date), Urgency 
ORDER BY date(date), Urgency) main 
on dummy.date = main.date 
and dummy.Urgency = main.Urgency 
order by dummy.date asc, Urgency asc 
+0

私が欲しいものに近いですが、返されるものはすべての日付が表示されず、先月の統計も表示されます。私のデータベースから来たものはhttp://pastebin.com/HCUgwG36を参照してください。 – iFr4g

+0

より良い例を提供するために、データの緊急性を修正しました。http://pastebin.com/hfj8Npwaスキーマはこちらhttp://sqlfiddle.com/#!9/715c7 – iFr4g

+0

メインの投稿にコメントする際に警告が表示されるかどうかはわかりませんが、これは@ghkhanが機能すると思いますか?毎晩 'glpi_tickets'テーブルに問い合わせるためにストアドプロシージャを作成すると、その日に記録された合計チケット数とそれらのurgenciesを取得し、それらを' COMPANYNAME_TICKETSTATS'というテーブルに格納します。列名は「DATE」、「TOTAL_TICKETS」、「VERY_LOW」、「LOW」、「MEDIUM」、「HIGH」、「VERY_HIGH」であり、それらは1,2,3,4、その日の5緊急下。それから私は、私が思うように積み上げたグラフを作成するのに必要な形式のデータを持っています。 – iFr4g

関連する問題

 関連する問題