- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是一名 SAS 开发人员。我有一个 sql 用于从名为“CalculatedPower”的列中获取最小值和最大值。下面是我从一组声明中得到的结构(lt_dt 和 lp_dt 是我想要的。我把它放在这里但它不在我的实际表中,因为我不知道如何实现这个):
station datetime calculatedpower min_power max_power lt_dt lp_dt
ABBA 28AUG2018:0:0:0 100 1 100 01SEP2018:1:0:0 28AUG2018:0:0:0
ABBA 31AUG2018:12:0:0 88 1 100 01SEP2018:1:0:0 28AUG2018:0:0:0
ABBA 01SEP2018:1:0:0 1 1 100 01SEP2018:1:0:0 28AUG2018:0:0:0
ZZZZ 07SEP2018:0:0:0 900 900 3000 07SEP2018:0:0:0 21SEP2018:0:0:0
ZZZZ 09SEP2018:0:0:0 1000 900 3000 07SEP2018:0:0:0 21SEP2018:0:0:0
ZZZZ 21SEP2018:0:0:0 3000 900 3000 07SEP2018:0:0:0 21SEP2018:0:0:0
如你们所见,我按 Station 聚合它们并使用 Min 和 Max 函数来获得 min_power 和 max_power。现在,我还需要获取最小日期时间(输入 lt_dt)和最大日期时间(输入 lp_dt)。我会期待如下:ABBA lt_dt 是 01SEP2018:1:0:0 而 lp_dt 是 28AUG2018:0:0:0
意思是说,lp_dt(datetime based on max_power) 而 lt_dt(datetime based on min power)
我的分组语句如下:
proc sql;
select
station
,datetime
,calculatedpower
,min(calculatedpower) as lt_calculatedpower
,max(calculatedpower) as lp_calculatedpower
from sumall
group by
station
;
quit;
有没有办法调整我现有的 SQL 语句以获得我想要的日期时间?我尝试了一个额外的 SQL 语句,如下所示(但是它需要永远处理 600k 数据,不确定它是否有效,因为它仍在运行)
proc sql;
select *,
case when calculatedpower=lt_calculatedpower then datetime end as lt_datetime
from minmax;
quit;
使用此代码,我预见如果与 1 个站点关联的计算功率相同但日期时间不同的行很少,将会出现问题。
最佳答案
在 SQL 中,您将需要使用包含 case 语句的子选择,该语句标识最小值和最大值出现的日期。子选择连接到原始表。
注意:SAS SQL 会在适当的时候自动重新加入汇总(聚合函数)结果。
示例
在此示例中,level1_id
用于station
,level2_seq
用于datetime
和x
用于 calculatedpower
。
data have;
do level1_id = 1 to 5;
do level2_seq = 1 to 5;
x = floor(100*ranuni(123));
output;
end;
end;
run;
proc sql;
create table want as
select
have.*
, min(have.x) as min_x
, max(have.x) as max_x
, min(at.min_at) as min_x_first_at_seq
, min(at.max_at) as max_x_first_at_seq
from
have
left join
(
select inside.level1_id, inside.level2_seq
, case when inside.x = min(inside.x) then inside.level2_seq else . end as min_at
, case when inside.x = max(inside.x) then inside.level2_seq else . end as max_at
from have inside
group by inside.level1_id
) at
on
have.level1_id = at.level1_id and
have.level2_seq = at.level2_seq
group by
have.level1_id
order by
have.level1_id, level2_seq
;
关于sql - 我如何从最小和最大分组依据中获取日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52742252/
我是一名优秀的程序员,十分优秀!