过滤GROUP BY视图,如HAVING

时间:2013-02-18 11:28:12

标签: sql

我有一张像这样的销售表:

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)不是&lt; '2013/01/01',但有一个符合要求的日期(2012/11/15)。

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

提前致谢,原谅我的英语不好。

3 个答案:

答案 0 :(得分:0)

如果我说得对,你应该从原始表中选择而不是从视图中选择:

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

答案 1 :(得分:0)

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

试试这个

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

DEMO HERE

如果您希望按Client分组,请尝试此操作以提供不同的客户端

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

DEMO HERE

答案 2 :(得分:0)

您需要针对原始表的新请求,因为视图与条件不对应。首先是WHERE子句,然后是GROUP BY

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