4

我有下表:

id 值 truncated_day just_yyyy_mm_dd
1167 300 11 年 7 月 1 日 0:00 11 年 7 月 1 日
1167 301 11 年 7 月 1 日 0:00 2011 年 7 月 1 日
1167 303 11 年 7 月 1 日 0:00 11 年 7 月 1 日
1167 308 11 年 7 月 1 日 0:00 11 年 7 月 1 日
1167 312 11 年 7 月 2 日 0:00 2011 年 7 月 2 日
1167 316 11 年 7 月 2 日 0:00 2011 年 7 月 2 日
1167 318 11 年 7 月 2 日 0:00 2011 年 7 月 2 日
1167 330 11 年 7 月 2 日 0:00 2011 年 7 月 2 日
1700 0 7/1/11 0:00 7/1/11
1700 10 7/1/11 0:00 7/1/11
1700 21 11 年 7 月 1 日 0:00 11 年 7 月 1 日
1700 33 2011 年 7 月 1 日 0:00 11 年 7 月 1 日
1700 34 2011 年 7 月 2 日 0:00 2011 年 7 月 2 日
1700 35 2011 年 7 月 2 日 0:00 11 年 7 月 2 日
1700 40 11 年 7 月 2 日 0:00 2011 年 7 月 2 日

该表实际上很长(超过 3200 万行!!)。

我想拥有每天和每个不同 ID 的最大值和最小值(read_value)。我尝试了以下查询,但它不起作用:

'$'select id, 
date_trunc('day', timestamp_utc) as truncated_day, 
substring(cast(date_trunc('day', timestamp_utc) as text) from 1 for 10) as just_yyyy_mm_dd,
max(value) as maxvalue,
min(value) as minvalue
from TABLE
order by device_id, truncated_day'$'

我基本上希望查询返回:

id min max truncated_day just_yyyy_mm_dd
1167 300 308 2011 年 7 月 1 日 0:00 11 年 7 月 1 日
1167 312 330 11 年 7 月 2 日 0:00 11 年 7 月 2 日
1700 0 33 7/1/11 0:00 7/1/11
1700 34 40 11 年 7 月 2 日 0:00 11 年 7 月 2 日

你能帮我解决这个问题吗?非常感谢您!ñ

4

4 回答 4

2

尝试这个。注意添加 GROUP BY。如果需要,您可以重新添加 just_yyyy_mm_dd 内容。

select id, 
date_trunc('day', timestamp_utc) as truncated_day, 
max(value) as maxvalue,
min(value) as minvalue
from TABLE
GROUP BY id, date_trunc('day', timestamp_utc)
order by device_id, truncated_day
于 2013-01-11T18:42:15.173 回答
0

在“order by”之前,您需要一个“group by”。基本上你需要按前 3 个字段分组。

于 2013-01-11T18:41:57.563 回答
0

您需要将您的更改order bygroup by. 实际上,您可能想要两者:

select device_id, date_trunc('day', timestamp_utc) as truncated_day, 
           substring(cast(date_trunc('day', timestamp_utc) as text) from 1 for 10) as just_yyyy_mm_dd,
           max(value) as maxvalue,
            min(value) as minvalue
from TABLE
group by device_id, date_trunc('day', timestamp_utc)
order by device_id, truncated_day

我很好奇是否group by device_id, truncated_day会工作。SQL 编译器是否在 just_yyyy_mm_dd 列上生成错误?它不需要生成错误,但它可能不会将该表达式识别为仅在聚合列上。

于 2013-01-11T18:42:39.900 回答
0
select id, min(value) as 'minvalue', max(value) as 'maxvalue', truncated_day, just_yy_mm_dd
from the_table
group by truncated_day, id, just_yy_mm_dd
于 2013-01-11T18:43:04.950 回答