我有一张像这样的销售表:
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子句来完成,但在我的程序中我正在访问视图,因此我无法更改它。有什么方法可以得到我想要的结果吗?
提前致谢,原谅我的英语不好。
答案 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'
如果您希望按Client
分组,请尝试此操作以提供不同的客户端
SELECT Client, Product,SaleDate
FROM Sales
WHERE SaleDate < '2013-01-01'
group by Client
答案 2 :(得分:0)
您需要针对原始表的新请求,因为视图与条件不对应。首先是WHERE子句,然后是GROUP BY
SELECT Client, Product, MAX(SaleDate)
FROM LastSale
WHERE SaleDate < '2013/01/01'
GROUP BY Client, Product