Sql 如何返回第一个记录和累加器

Sql 如何返回第一个记录和累加器,sql,google-bigquery,Sql,Google Bigquery,如何按客户返回第一次购买日期、第一位销售人员和第一家店铺以及其总费用 select bi.biifclie as customer, aux.salesman as first_salesman, aux.store as first_store, aux.date_ as first_date, CAST(SUM(bi.biifpliq) as float64) as total_bought, CAST((SUM(bi.biifptab)-S

如何按客户返回第一次购买日期、第一位销售人员和第一家店铺以及其总费用

select 
    bi.biifclie as customer,
    aux.salesman as first_salesman,
    aux.store as first_store,
    aux.date_ as first_date,
    CAST(SUM(bi.biifpliq) as float64) as total_bought,
    CAST((SUM(bi.biifptab)-SUM(bi.biifpliq)) as float64) as discount,
    CAST(SUM(bi.biifpliq)-SUM(bi.biifcrep)-SUM(bi.biifvari + bi.biifcomb + bi.biifcomc + bi.biificmc)-SUM(bi.biiffixo) as float64) as rentability,
    COUNT(DISTINCT bi.biifcodi) AS orders
    MAX(bi.biifdata) AS last_purchase_date,
    MIN(bi.biifdata) AS first_purchase_date,
    DATE_DIFF(MAX(bi.biifdata),current_date(),month)*-1 as inactivity_time,
    FROM yyyyyyy.gix.bi_biif bi 
    LEFT JOIN 
    (
        SELECT 
        aux0.biifclie as customer,
        aux0.biifvend as salesman,
        aux0.biifempe as store,
        aux0.biifdata as date_
        FROM yyyyyyy.gix.bi_biif aux0 ORDER BY date_ ASC LIMIT 1
    ) AS aux ON aux.cliente = bi.biifclie
    GROUP BY customer,first_salesman,first_store,first_date
我尝试使用一个左连接子查询来实现这一点,按日期排序(这样我就可以返回第一个日期),但是这些字段(

) 全部返回空值

我是做错了还是逻辑不正确

谢谢

考虑以下内容

select biifclie as customer,
  array_agg(struct(biifvend as salesman, biifempe  as store, biifdata as date) order by biifdata limit 1)[offset(0)].*,
  cast(sum(biifpliq) as float64) as total_bought
from `yyyyyyy.gix.bi_biif` t
group by customer    

上述解决方案,是否1)按客户分组2)对于每个客户,它会获取所有相应的行并保留其中一行-日期前订购的第一行3)然后“将结果从数组转换为单独的列

请包含足够的示例数据,以演示所需的行为。(通常,最好将问题简化为演示该行为所需的列)是的,它起作用了,谢谢米哈伊尔,但是你能用另一种方式解释一下吗?你的解决方案很好,我会标为anwser,但我想理解并用最简单的方式来做,因为你的方法需要太多的知识,而我是一个初学者。谢谢我在回答中所用的方式——这是做你要求的事情最简单、最理想的方式。使用联接执行此操作不会产生任何效果和反效果!无论如何-请参阅answerYep中的简要说明,这有助于我提高投票率,但由于我是代表15,所以我的提高投票率没有被考虑在内-edit只获得了15个代表和提高投票率。什么是[抵消(0)]*does和它的语法是什么?就在agg_数组之后?array_agg的结果是一个数组。由于限制1,它是一个包含一个元素的数组。因此
[offset(0)]
将此元素提取为一个结构。然后
*
将该结构显示为单独的列。您可以通过使用代码并删除
*
来查看结果,然后删除
[offset(0)]
等等来查看这一点
select biifclie as customer,
  array_agg(struct(biifvend as salesman, biifempe  as store, biifdata as date) order by biifdata limit 1)[offset(0)].*,
  cast(sum(biifpliq) as float64) as total_bought
from `yyyyyyy.gix.bi_biif` t
group by customer