2013-05-10 219 views
1

我試圖構造一個SQL語句的MS Access抓住從我們的數據庫由產品的所有銷售從未被出售給特定客戶2013年1月1日之前。我相信以下SQL語句會這樣做:獲取日期範圍之間的所有行與分日期

SELECT 
    Sales.CustomerID, 
    Min(Sales.InvoiceDate) AS MinOfInvoiceDate, 
    Sum(SalesDetail.StdCost) AS SumOfStdCost 
FROM 
    Sales INNER JOIN SalesDetail 
    ON Sales.SalesID = SalesDetail.SalesID 
GROUP BY 
    Sales.CustomerID 
HAVING 
    (((Min(Sales.InvoiceDate))>=#1/1/2013#)); 

表銷售包含:ID,發票號碼,客戶ID和日期。 (我叫它發票,但我沒有設計它...)SalesDetail是每個發票行項目:銷售/發票ID,產品ID /數量,數量和成本

我的問題是,我將如何打破這按月進一步?任何幫助表示讚賞!

編輯: Alrighty! :)因此,這裏是從上述查詢輸出的示例:

CustomerID | MinOfInvoice | SumOfStdCost 
Customer1 | 2/1/2013  | $300 

我想什麼,是要表明每一張發票,它的日期(或僅僅一個月,無所謂),同時保持分組/表達式( ?)具有最小的發票日期大於2013年1月1日,如客戶的標準,以便

CustomerID | InvoiceDateMonth | StdCost 
Customer1 | 2/1/2013   | $100 
Customer1 | 3/15/2013   | $130 
Customer1 | 4/7/2013   | $70 

customer1表開始2013年1月1日之後收到的發票,所以他們應該被列出。

顧客2在2012年和2013年的發票,所以它不應該是在查詢結果中。

我真的希望這是可能的,我一直在打我的頭好幾天了,寧願跳過不必逐個檢查每個客戶在我的代碼的痛苦過程。再次)

感謝所有幫助; :(我相信使數據庫做的工作!

+0

術語「按月進一步打破了這一點,」是PRET ty含糊不清。考慮[編輯](http://stackoverflow.com/posts/16490206/edit)你的問題,包括要應用於選擇/合併標準的你想要的結果是什麼樣子的例子,。有時候這樣做甚至會幫助你回答你自己的問題。 – 2013-05-11 13:01:03

回答

0

您可以通過執行使用原始查詢的「簡裝版」爲子查詢限制的結果,那些感興趣的客戶非常類似的查詢拔出詳細爲這些客戶。爲所有客戶提供基本的查詢會...

SELECT 
    Sales.CustomerID, 
    Sales.InvoiceDate, 
    SalesDetail.StdCost 
FROM 
    Sales INNER JOIN SalesDetail 
     ON Sales.SalesID = SalesDetail.SalesID 

...所以我們可以簡單的添加使用相似的邏輯將您的原始查詢,只包括我們要

SELECT 
    Sales.CustomerID, 
    Sales.InvoiceDate, 
    SalesDetail.StdCost 
FROM 
    Sales INNER JOIN SalesDetail 
     ON Sales.SalesID = SalesDetail.SalesID 
WHERE 
    Sales.CustomerID IN 
     (
      SELECT CustomerID 
      FROM Sales 
      GROUP BY CustomerID 
      HAVING MIN(InvoiceDate)>=#2013-01-01# 
     ) 
客戶WHERE子句

另一種方式來做到這一點是使用一個稍微不同的子查詢排除客戶與早期發票

SELECT 
    Sales.CustomerID, 
    Sales.InvoiceDate, 
    SalesDetail.StdCost 
FROM 
    Sales INNER JOIN SalesDetail 
     ON Sales.SalesID = SalesDetail.SalesID 
WHERE 
    Sales.CustomerID NOT IN 
     (
      SELECT CustomerID 
      FROM Sales 
      WHERE InvoiceDate<#2013-01-01# 
     ) 
+0

這是完美的,不僅是結果,而且瞭解子查詢!謝謝! – 2013-05-15 16:11:58

相關問題