1

我有一个这样的表销售:

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/01/01',但有一个日期符合请求 (2012/11/15)。

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

在此先感谢,并原谅我糟糕的英语。

4

3 回答 3

0

如果我做对了,您应该从原始表中选择,而不是从视图中选择:

SELECT *
FROM Sales
WHERE SaleDate < '2013/01/01'
于 2013-02-18T11:35:59.747 回答
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

在这里演示

于 2013-02-18T11:44:45.810 回答
0

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

SELECT Client, Product, MAX(SaleDate)
FROM LastSale
WHERE SaleDate < '2013/01/01'
GROUP BY Client, Product
于 2013-02-18T12:42:45.027 回答