I got oracle query as below.
with table_a as(
select 1 as call_key, date '2021-06-01' as customer_contact, 1 as status from dual union all
select 1 as call_key, date '2021-06-02' as customer_contact, 2 as status from dual union all
select 1 as call_key, date '2021-06-03' as customer_contact, 3 as status from dual union all
select 1 as call_key, date '2021-06-03' as customer_contact, 4 as status from dual union all
select 2 as call_key, date '2021-06-01' as customer_contact, 1 as status from dual union all
select 2 as call_key, date '2021-06-04' as customer_contact, 1 as status from dual
)
select call_key, Sum(status) Keep(Dense_Rank Last Order by customer_contact) as sum_result
from table_a
group by call_key
;
Result is like this: | call_key| sum_resul| | --------|----------| | 1 | 7 | | 2 | 1 |
I need to convert oracle language to BigQuery, but BigQuery needs to have 'group by' in query.
I try to use array_agg as below, but I cannot get the same result as oracle. Please Help!
with calls as (
select *
from unnest([struct(1 as call_key, date '2021-06-01' as customer_contact, 1 as status)
,struct(1 as call_key, date '2021-06-02' as customer_contact, 2 as status)
,struct(1 as call_key, date '2021-06-03' as customer_contact, 3 as status)
,struct(1 as call_key, date '2021-06-03' as customer_contact, 4 as status)
,struct(2 as call_key, date '2021-06-01' as customer_contact, 1 as status)
,struct(2 as call_key, date '2021-06-04' as customer_contact, 1 as status)
])
)
select call_key
,array_agg(status order by customer_contact,status desc limit 1)[ordinal(1)] as status1
from calls
group by call_key
