2013-02-18 44 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