在where子句中的s sql max()

时间:2013-11-19 12:58:03

标签: tsql max

我正在尝试在where子句中使用MAX(InvoiceDate)

SELECT a.Customer,
       a.Name,
       b.Name,
       a.Branch,
       a.Area,
       MAX(e.InvoiceDate)
FROM   Customers a
       LEFT JOIN Rep b
         ON a.Salesperson = b.Salesperson
            AND a.Branch = b.Branch
       LEFT JOIN Sales e
         ON e.Customer = a.Customer
WHERE  max(e.InvoiceDate) >= '2013-11-01'
GROUP  BY a.Customer,
          a.Name,
          b.Name,
          a.Branch,
          a.Area 

3 个答案:

答案 0 :(得分:1)

一般来说,聚合需要在HAVING中引用。

HAVING max(e.InvoiceDate) >= '2013-11-01'

但在这种情况下你可以使用

WHERE  e.InvoiceDate >= '2013-11-01'

在这里使用LEFT JOIN没有意义,因为条件会将其变回INNER

答案 1 :(得分:0)

please try

with cte as
    (
    SELECT a.Customer,
           a.Name,
           b.Name,
           a.Branch,
           a.Area,
           MAX(e.InvoiceDate) as xx
    FROM   Customers a
           LEFT JOIN Rep b
             ON a.Salesperson = b.Salesperson
                AND a.Branch = b.Branch
           LEFT JOIN Sales e
             ON e.Customer = a.Customer
    GROUP  BY a.Customer,
              a.Name,
              b.Name,
              a.Branch,
              a.Area 
    )

    select * from cte where xx >='2013-11-01'

答案 2 :(得分:0)

双向,或使用cte / subquery方法,或者代替where: 这里有一个例子

Declare @Customers as table (Customer varchar(100),Name varchar(200),InvoiceDate datetime);
insert into @Customers values( '1','asd','2012-01-01');
insert into @Customers values( '1','asd','2012-01-02');
insert into @Customers values( '2','asd','2012-01-03');
insert into @Customers values( '2','asd','2012-01-04');
insert into @Customers values( '3','asd','2012-01-05');

SELECT Customer ,MAX(InvoiceDate)
FROM @Customers
GROUP  BY Customer
Having  max(InvoiceDate) > '2012-01-03'

select * 
from (
SELECT Customer ,MAX(InvoiceDate) InvoiceMax
FROM @Customers
GROUP  BY Customer) xxx
where InvoiceMax > '2012-01-03'
相关问题