假设我有以下数据
SqlUnixTime BID ASK VALID ASSET_ID
1504900871 101.50 101.6 Y XY1
1504900870 0 101.6 Y XY1
1504900871 101.50 20 N XY1
...
在BID& ASK列我可以有一个有效价格,0(表示没有数据)或无效价格(见最后一行)。
我想计算30天的平均值。我已设法使用以下查询处理0案例:
Select ASSET_ID, AVG(NULLIF(BID,0)) as AVG_BID_30D, AVG(NULLIF(ASK,0)) as AVG_ASK_30D FROM myDB.myTable where SqlUnixTime > 1504900870 GROUP BY ASSET_ID;
但是,我如何才能平均VALID =" Y"的那些值。我想到最后放一个where子句但是它可能不会选择无效的asset_id?我只是希望它有一个空?
答案 0 :(得分:1)
已更新
将其分组(ASSET_ID,VALID =' Y'),然后按VALID =' Y'
再次生成结果组我认为它会奏效。
select A.ASSET_ID, A.AVG_BID_30D, A.AVG_ASK_30D
from (Select ASSET_ID, AVG(NULLIF(BID,0)) as AVG_BID_30D, AVG(NULLIF (ASK,0)) as AVG_ASK_30D, VALID
FROM myDB.myTable where SqlUnixTime > 1504900870
GROUP BY ASSET_ID, VALID='Y') as A
group by ASSET_ID='Y';