Sql 表中每天值的总和
我的桌子: 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 我尝试了以下查询,但不起作用: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
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