2016-06-14 11 views
1

현재 NULL, 0 여부 몇 가지 유용한 정보를 반환하지만 충분하지는 않기 때문에 그가 요청한 꽤 겹쳐진 그래프에 넣을 수 있습니다. 이를 달성하기위한 충분한 데이터를 얻으려면 긴급 성이 0이고 일도 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', '3', '10' 
'10/06/2016', '2', '1' 
'14/06/2016', '1', '1' 
'14/06/2016', '5', '1' 

내가 이상적으로는 다음과 같이 표시 할 것 같은 : 등등

# 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' 

그리고있다.

저는 SQL (자기 가르침)에 익숙해 져서 모든 도움이 많이받습니다.

편집 : 스키마 나는 이것이 당신이 (그것이 작동하는 희망) 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

이렇게 내가 끝내고 내가 원하는 방식으로 데이터를 제공하는 것으로 보입니다. 그때이 절차를 설정

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 ; 

:

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)); 

그럼 내가 수집하고 데이터를 채우기 위해 저장 프로 시저를 구축 : 모든

먼저 나는에 데이터를 저장하기 위해 새 테이블을 생성 매일 매니저가 매시간 실행하기 때문에 관리자가 당일에 참조하기를 원한다면 (나는 이것을 mysql 서버 터미널에 직접 입력했다.)

29 분은 내가 얻을 수있는 시간에 가까운 곳에서 달리기를 원했기 때문입니다.

# 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' 

이 다음 수 있습니다 :

이 지금 나 Excel에서 누적 그래프 (I 달의 시작에서 항목을했다, 그래서 6월 1일부터 16일까지에서 스푸핑 항목)를 만들 수있는 형식으로 멋진 데이터를 출력 시간에 사람이 그들이 할 수있는 그것을 사용하고 싶어 그래서 만약

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

내가 여기를 떠날거야, 모두 감사하고 :)

012,351,641 도움 : 내게는 select 그래서는 현재 달 Excel로 가져 취득을

iFr4g의

1

당신의 쿼리 때문에 만 그룹이 열을 기준으로 urgency 당 하나 개의 행을 생산 요구 있었는지라고 생각했다. 각 날짜와 긴급성에 대한 별개의 결과를 보려면 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