2013-02-18 47 views
1

我有一个表的销售是这样的:过滤GROUP BY的观点就像

CLIENT, PRODUCT, SALEDATE 
Peter, Phone, 2013/02/01 
Peter, Phone, 2012/11/15 
Peter, Phone, 2010/01/01 

我有这种看法命名LastSale:

SELECT Client, Product, MAX(SaleDate) 
FROM Sales 
GROUP BY Client, Product 

如果我们执行这一观点,其结果必然是

Peter, Phone, 2013/02/01 

现在我的问题是,我使用的是由SaleDate程序过滤这个观点,例如:

SELECT * 
FROM LastSale 
WHERE SaleDate < '2013/01/01' 

而这个SQL没有给我的结果,因为MAX(SaleDate)不<“2013年1月1日”,但也有符合要求(二零一二年十一月十五日)的日期。

我知道这可以在视图中使用HAVING子句完成,但在我的程序中我正在访问视图,所以我无法更改它。有什么办法可以得到我想要的结果?

在此先感谢,并请原谅我可怜的英语。

+0

您正在使用哪些DBMS?甲骨文? Postgres的? – 2013-02-18 11:38:22

回答

0

如果使用MAX(salesdate)它会自动给你刚刚最大(1行)

试试这个

SELECT Client, Product,SaleDate 
    FROM Sales 
    WHERE SaleDate < '2013-01-01' 

DEMO HERE

如果你想

GR由牛津大学出版社Client然后试试这个给不同的客户端

SELECT Client, Product,SaleDate 
FROM Sales 
WHERE SaleDate < '2013-01-01' 
group by Client 

DEMO HERE

0

如果我这样做是正确,你应该从你的原始表不是从视图中进行选择:

SELECT * 
FROM Sales 
WHERE SaleDate < '2013/01/01' 
0

对原始表的新要求是必要的,因为你观点不符合条件。首先WHERE子句然后GROUP BY

SELECT Client, Product, MAX(SaleDate) 
FROM LastSale 
WHERE SaleDate < '2013/01/01' 
GROUP BY Client, Product