mysql存储过程中的总值
我试图从数据库中获取具有不同日期时间戳的值的总和。我的目标是返回表中该日期的所有值的每天总数。我的存储过程如下所示:mysql存储过程中的总值,mysql,stored-procedures,Mysql,Stored Procedures,我试图从数据库中获取具有不同日期时间戳的值的总和。我的目标是返回表中该日期的所有值的每天总数。我的存储过程如下所示: 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_t
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//
我相信我将不得不使用临时表或其他东西,但无法在网上找到有关我的情况的任何建议。对于每一天,我每半小时有一个值,我希望存储的过程在我传入的日期范围内返回每天的总计值。数据库列看起来是这样的
+-----------+---------------------+--------------+----------------+-------+
| 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 |
使用CAST(日期时间为日期)解决
你的问题是…?每个值都是按时间段单独返回的,我想要一整天的总数。但是。。。程序不会返回任何内容。他们只是“做事”:-?不奇怪。您忘记了一个
group by
子句。如果还有时间戳,如何按日期分组?
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//