2010-08-24 35 views
0

任何人都可以爲我生成查詢。 可以說我有一個表銷售(saleID,date_of_sales,的customerID,ITEMID,saleprice)構建下表的查詢

  • date_of_sales是存儲銷售時間日期時間字段。

  • 客戶ID是自己exlpaining告訴誰賣物品。

  • itemID是賣出的物品的ID。

  • saleprice是該物品的銷售價格。

我想建立一個查詢,將每個客戶給出的最後一次購買的細節。這可以通過使用date_of_sales來完成。

示例表

saleID | date_of_sales | customerID | itemID | saleprice

101 | 2008-01-01 | C2000 | I200 | 650 |
102 | 2010-01-01 | C2000 | I333 | 200 |
103 | 2007-01-01 | C3333 | I111 | 800 |
104 | 2009-12-12 | C3333 | I222 | 100 |

這是示例數據表,爲簡單起見,只有兩個客戶。

  • 客戶C2000做了他的最後一次購買 於2010-01-01

  • 客戶C3333做了他的最後一次購買 在2009-12-12

我希望得到一個像這樣的結果

customerID | date_of_sales | itemID | saleprice

C2000 | 2010-01-01 | I333 | 200 |

C3333 | 2009-12-12 | I222 | 100 |

回答

1

這可能是你在找什麼...

SELECT * 
    FROM sales 
    WHERE sales.date_of_sales = (SELECT MAX(date_of_sales) 
            FROM sales s2 
            WHERE s2.customerID = sales.customerID); 

有它一個小問題;如果同一天有兩筆銷售給同一客戶,則會得到兩行(除非您的銷售日期欄也包含時間)。不過,我認爲上述答案也是如此。

+0

此作品完美,感謝布賴恩 – karanits 2010-08-24 12:35:06

0

此外,如果您想根據最大日期的單個條目獲取結果,我將使用上面的@Sachin Shanbhag的查詢,但也會添加最大銷售ID值...因爲那樣會暗示爲連續的,以最後輸入的爲準可能是最近的。

SELECT S.* FROM 
    sales S 
    INNER JOIN 
    ( SELECT 
      customerID, 
      MAX(date_of_sales) dos, 
      MAX(SalesID) maxSale 
     FROM 
      sales  
     GROUP BY customerID 
    ) S2 ON S.customerID = S2.customerID 
      AND S.date_of_sales = S2.dos 
      AND S.SalesID = S2.maxSale 
+0

解決問題條目進行的同一天將是我的日期字段使用時間,以及更簡單的方法。 – karanits 2010-08-24 12:37:30

+0

@karanits - 是的,但在這種情況下,日期字段僅標記日期部分而不是時間。但是,如果dates_of_sales是完整的日期/時間列,那麼它將通過MAX()聚合調用自動在整個日期+時間內進行註冊。 – DRapp 2010-08-24 13:46:02