2013-02-27 86 views
0

我想从我的数据库中获取具有不同日期时间戳的值的总和。我的目标是为该日期的表格中的所有值返回总计。我的存储过程如下所示:在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// 

我相信我将不得不使用一个tempory表或东西,但每一天都找不到任何建议网上关于我的situation.For我每半小时的值,我想。存储porocedure归还这些累计的日期范围内我通过内每一天的数据库列看起来像这样

+-----------+---------------------+--------------+----------------+-------+ 
| 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

和你的问题是......? – 2013-02-27 17:01:43

+0

每个值都按时间框架单独返回,我想要一整天。 – DavidM 2013-02-27 17:13:10

+0

但是...程序不会返回任何东西。他们只是“做事”: - ?毫不奇怪, – 2013-02-27 17:15:33

回答

0

采用CAST(日期时间AS DATE)解决;

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//