在汇总子查询中缺少分组依据语句

时间:2018-11-28 19:38:38

标签: sql sql-server

我有一个查询,随着时间的推移,同一位客户有多个销售人员,因此我只想显示该给定客户的最新销售人员。

我编写了以下查询,以显示客户和销售人员的最新日期,但收到错误消息:“除非在HAVING子句或选择列表,并且要聚合的列是外部引用。”

不知道group by语句在哪里,因为这就是原因,所以希望有人可以提供正确的语法帮助。

select CUST_NAME, SALESMAN_NAME, year(invoice_Date) 
from ns.SAR_COMBINED sc
where sc.invoice_date  >= (select max(sc.invoice_date) from 
ns.SAR_COMBINED)

谢谢

2 个答案:

答案 0 :(得分:1)

您还可以使用row_number()

   select * from ( 
    select CUST_NAME, SALESMAN_NAME,
     year(invoice_Date) ,
    row_number() over(partition by cust_name order by invoice_date desc ) rn
    from ns.SAR_COMBINED sc) t where t.rn=1

答案 1 :(得分:0)

您需要一个相关子查询:

select CUST_NAME, SALESMAN_NAME, year(invoice_Date) 
from ns.SAR_COMBINED sc
where sc.invoice_date >= (select max(sc2.invoice_date)
                          from ns.SAR_COMBINED sc2
                          where sc2.cust_name = sc.cust_name
                         );

相关子句是子查询中的where子句。它将sc2中的客户与外部查询中的客户进行匹配。