2013-02-27 2 views
0

데이터베이스에서 다른 datetime 스탬프가있는 값의 합계를 가져 오려고합니다. 나는 그 날의 테이블에있는 모든 값을 매일 합계로 반환하려고합니다. 나는이 tempory 테이블이나 뭔가를 사용해야 할 것입니다하지만 난 값을 매 30 분마다 있고 내가 원하는 매일 내 situation.For에 관한 조언 온라인을 찾을 수 있다고 생각mysql 저장 프로 시저의 전체 값

DELIMITER // 
DROP PROCEDURE get_reads; 
CREATE PROCEDURE get_reads (IN device varchar (20), IN start_date datetime, IN end_date datetime, IN read_type varchar(8)) 

BEGIN 

    SELECT dr.date_time, sum(dr.device_reading) 
    FROM DEVICE_DETAILS dd, 
    DEVICE_READING dr 
    WHERE dr.device_id = dd.device_id 
    AND dd.serial_number = device 
    AND dr.date_time BETWEEN start_date AND end_date 
    AND dr.reading_type = read_type; 



END// 

: 내 가게 절차는 다음과 같습니다 . 저장된 porocedure이 난에 전달하는 날짜 범위 내에서 매일 집계 돌아 데이터베이스 컬럼 (DATE AS 날짜) CAST를 사용하여 해결 그래서

+-----------+---------------------+--------------+----------------+-------+ 
| device_id | date_time   | reading_type | device_reading | units | 
+-----------+---------------------+--------------+----------------+-------+ 
| E1  | 2012-11-19 00:29:00 | Profile  | 0.0719131800 | KW | 
| E1  | 2012-11-19 00:59:00 | Profile  | 0.0802306700 | KW | 
| E1  | 2012-11-19 01:29:00 | Profile  | 0.0767434100 | KW | 
| E1  | 2012-11-19 01:59:00 | Profile  | 0.0737920500 | KW | 
| E1  | 2012-11-19 02:29:00 | Profile  | 0.0794256700 | KW | 
| E1  | 2012-11-19 02:59:00 | Profile  | 0.0729868200 | KW | 
| E1  | 2012-11-19 03:29:00 | Profile  | 0.0745970500 | KW | 
| E1  | 2012-11-19 03:59:00 | Profile  | 0.0804993100 | KW | 
| E1  | 2012-11-19 04:29:00 | Profile  | 0.0837193100 | KW | 
| E1  | 2012-11-19 04:59:00 | Profile  | 0.0483004600 | KW | 
+1

귀하의 문제는 ...? –

+0

각 값은 시간 프레임에 따라 개별적으로 반환되며 하루 종일 총을 원합니다. – DavidM

+0

하지만 ... 프로 시저가 아무 것도 반환하지 않습니다. 그들은 단지 "일을"합니다 : -? –

답변

0

과 같이;

DELIMITER // 
DROP PROCEDURE get_reads; 
CREATE PROCEDURE get_reads (IN device varchar (20), IN start_date datetime, IN end_date datetime, IN read_type varchar(8)) 

    BEGIN 

      SELECT dr.date_time, sum(dr.device_reading) 
      FROM DEVICE_DETAILS dd, 
      DEVICE_READING dr 
      WHERE dr.device_id = dd.device_id 
      AND dd.serial_number = device 
      AND dr.date_time BETWEEN start_date AND end_date 
      AND dr.reading_type = read_type 
      GROUP BY CAST(dr.date_time AS DATE); 



    END//