[英]SQL query to find the max and min for each different day
我有下表:
id value truncated_day just_yyyy_mm_dd 1167 300 7/1/11 0:00 7/1/11 1167 301 7/1/11 0:00 7/1/11 1167 303 7/1/11 0:00 7/1/11 1167 308 7/1/11 0:00 7/1/11 1167 312 7/2/11 0:00 7/2/11 1167 316 7/2/11 0:00 7/2/11 1167 318 7/2/11 0:00 7/2/11 1167 330 7/2/11 0:00 7/2/11 1700 0 7/1/11 0:00 7/1/11 1700 10 7/1/11 0:00 7/1/11 1700 21 7/1/11 0:00 7/1/11 1700 33 7/1/11 0:00 7/1/11 1700 34 7/2/11 0:00 7/2/11 1700 35 7/2/11 0:00 7/2/11 1700 40 7/2/11 0:00 7/2/11
該表實際上很長(超過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 7/1/11 0:00 7/1/11 1167 312 330 7/2/11 0:00 7/2/11 1700 0 33 7/1/11 0:00 7/1/11 1700 34 40 7/2/11 0:00 7/2/11
您能幫我這個疑問嗎? 提前非常感謝您! ñ
嘗試這個。 注意添加了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
您需要在“排序依據”之前添加“分組依據”。 基本上,您需要按前3個字段分組。
您需要將order by
更改為group 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列上生成錯誤? 它不需要產生錯誤,但是可能無法識別該表達式僅在聚合列中。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.