Sql 表中每天值的总和

Sql 表中每天值的总和,sql,postgresql,datetime,aggregate-functions,Sql,Postgresql,Datetime,Aggregate Functions,我的桌子: Dataid date register_type read_value 77 2012-08-15 gen 20 77 2012-08-15 solar 48 77 2012-08-16 gen 39 77 2012-08-16 gen 22 80 2012-07-11 gen 11 80

我的桌子:

Dataid date register_type read_value 77 2012-08-15 gen 20 77 2012-08-15 solar 48 77 2012-08-16 gen 39 77 2012-08-16 gen 22 80 2012-07-11 gen 11 80 2012-07-12 id 23 91 2012-02-01 id 4 91 2012-02-01 gen 59 91 2012-02-08 gen 18 我尝试了以下查询,但不起作用:

select 
    dataid, 
    date_trunc('day', timestamp_localtime) as truncated_day,
    substring(cast(date_trunc('day', timestamp_localtime) as text)
              from 1 for 10) as date,            
    sum(read_value) as daily_gen
where register_type like ‘%gen%’
from table
group by dataid, date_trunc('day', timestamp_localtime) 
order by dataid, truncated_day

如何编写此查询?

在SQL Server中,以下操作将起作用:

SELECT SUM(read_value) AS daily_value, dataid, date
FROM (SELECT *, CONVERT(VARCHAR(10),date,105) AS newdate FROM Table)
WHERE type = 'gen'
GROUP BY newdate
对于MySQL,请使用以下选项:

SELECT SUM(read_value) AS daily_value, dataid, date
FROM (SELECT *, DATE_FORMAT(newdate, '%d-%m-%Y') AS day FROM Table)
WHERE type = 'gen'
GROUP BY newdate
子查询是必需的,因为
groupby
不支持常用的聚合函数。但是,只有当
date
是日期时间时,才需要此选项。如果只是一个日期,则无需从中提取日期。

适用于Postgres:

SELECT dataid, date, sum(read_value) AS daily_value
FROM   tbl
WHERE  register_type = 'gen'
GROUP  BY 1,2
ORDER  BY 1,2
或者您的列名为
date
实际上不是日期吗?
如果它实际上是一个
时间戳
,请将我查询中的
日期
替换为
日期::日期
(将
时间戳
转换为
日期
),它应该可以工作。

(即使Postgres允许,您也不应该首先使用like
date
作为标识符。)

实际上,我的列最初命名为timestamp\u localtime。但我将其截断为截断的日期(然后是YYYY\U mm\U dd)。非常感谢你的帮助!
SELECT dataid, date, sum(read_value) AS daily_value
FROM   tbl
WHERE  register_type = 'gen'
GROUP  BY 1,2
ORDER  BY 1,2