Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何循环选择每日最大值和最小值之和_Sql_Postgresql_Aggregate Functions - Fatal编程技术网

Sql 如何循环选择每日最大值和最小值之和

Sql 如何循环选择每日最大值和最小值之和,sql,postgresql,aggregate-functions,Sql,Postgresql,Aggregate Functions,我有两个表,我正试图选择,单位和饲料 表单元是包含 unitid, userid, guid, fields, createdat 另一个表feed包含 feedid, unitid, value, createdat 表单位的示例数据: 1,1000,'0b243396-a015-11e6-8001-9cf387d90940','a','2016-11-04 21:36:32.71281' 2,1000,'0b243396-a015-11e6-8001-9cf387d90941','b',

我有两个表,我正试图选择,单位和饲料

表单元是包含

unitid, userid, guid, fields, createdat
另一个表feed包含

feedid, unitid, value, createdat
表单位的示例数据:

1,1000,'0b243396-a015-11e6-8001-9cf387d90940','a','2016-11-04 21:36:32.71281' 2,1000,'0b243396-a015-11e6-8001-9cf387d90941','b','2016-11-04 21:40:32.71281' 3,1001,'0b243396-a015-11e6-8001-9cf387d90942','b','2016-11-04 21:47:32.71281' 4,1001,'0b243396-a015-11e6-8001-9cf387d90943','c','2016-11-04 21:50:32.71281' 但是我不确定应该把userid=n子句放在哪里


那么,我如何选择spesific用户ID注册的每个单元的最小和最大值的总和呢?每日间隔

这就是你要找的吗

SELECT f.unitid,
       min(f.value) + max(f.value)
FROM unit u
   JOIN feed f ON u.id = f.unitid
WHERE u.userid = 1000
GROUP BY f.unitid;

┌────────┬──────────┐
│ unitid │ ?column? │
├────────┼──────────┤
│      1 │   0.0821 │
│      2 │   0.0548 │
└────────┴──────────┘
(2 rows)

给出您的示例数据:您希望得到什么结果?仅对用户ID 1000注册的1号机组和2号机组进行合计,即0.1369 1号机组0.0821 0.0021+0.0800+2号机组0.0548 0.0008+0.0540汇总,您是指总和吗?Ie你想要minvalue+mavvalue吗?是的,很抱歉我应该使用total not Summary这个词我得到42703个错误列,USING子句中指定的unitid在左表中不存在。嗯,我不确定unit中的列是否真的被称为id或unitid,因为你在问题中使用了两者。我已经更改了答案,因此它假设该列被称为id。我如何合计该列,使其只输出0.1369?从0.0821+0.0548好的,知道了。我的结果是这样的:从SELECT MINf.value::DOUBLE PRECISION+MAXf.value::DOUBLE PRECISION作为单位u的总计选择SUMtotal在u.id=f.unitid和f.createdat>=now::date+interval'1h'中u.userid=1000按f.unitid分组实际上是正确的,只需用外部查询将其包围起来。
SELECT SUM(value::DOUBLE PRECISION)::text FROM 
((SELECT f.value FROM feed f, unit u WHERE f.unitid = unit.id AND f.createdat >= now()::date + interval '1h' ORDER BY f.createdat DESC LIMIT 1) 
UNION ALL 
(SELECT f.value FROM feed f, unit u WHERE f.unitid = unit.id AND f.createdat >= now()::date + interval '1h' ORDER BY f.createdat ASC LIMIT 1)) t
SELECT f.unitid,
       min(f.value) + max(f.value)
FROM unit u
   JOIN feed f ON u.id = f.unitid
WHERE u.userid = 1000
GROUP BY f.unitid;

┌────────┬──────────┐
│ unitid │ ?column? │
├────────┼──────────┤
│      1 │   0.0821 │
│      2 │   0.0548 │
└────────┴──────────┘
(2 rows)