我正在尝试在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
答案 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'