2016-08-11 23 views
0

我有一個表有大量的條目,我只需要在每個組中的第一個。SQL模式只選擇組中的第一行

該表格用於存儲過去30年的每日基金價格(1000+基金)。我需要找出當日存在的每隻基金之前或某一特定日期的最後價格(因此每隻基金只有一行)。

在其簡化形式,該表列日期FundCode價格

下列輸入

Date FundCode Price 2016/01/05 X123 1.234 2016/01/04 X123 1.233 2016/01/03 X123 1.222 2016/01/05 A456 1.876 2016/01/04 A456 1.822 2016/01/03 A456 1.776 2016/01/03 M234 3.234

...查詢爲2016年1月4日的情況下,應該產生

Date FundCode Price 2016/01/04 X123 1.233 2016/01/04 A456 1.822 2016/01/03 M234 3.234

我有一個使用相關子查詢中的溶液但是沒有任何數量的指標會讓它在合理的時間內運行。

我確定有一個簡單的解決方案,但我只是看不到它。

+2

添加一些樣本表數據和預期的結果。還標記使用的dbms。 – jarlh

+2

不要猶豫,提供樣本數據,期望的結果和您正在使用的查詢。另外,請記住用您正在使用的數據庫標記問題。 –

+0

[提出問一個好的結構化查詢語言(SQL)問題](http://meta.stackoverflow.com/a/271056/4955425) – sstan

回答

0

單個嵌套查詢讓我對每個基金的最大日期,然後內部連接到這對fundCode /日,從而...

SELECT 
    Date, 
    FundCode, 
    Price 
FROM 
    PriceHistory H 
    INNER JOIN 

     /* this nested query gives the max date for each fund*/ 
     (SELECT 
     FundCode, 
     max(Date) AS MaxDate 
     FROM 
     PriceHistory H2 
     WHERE 
     Date<[email protected] 
     GROUP BY 
     FundCode) AS RowSelector 

    ON H.FundCode=RowSelector.FundCode AND H.Date=RowSelector.MaxDate 
0

Somethink像

SELECT fundCode, price, date FROM your_table WHERE date<='date_you_need' GROUP BY fundCode HAVING MAX(date) 

這樣的查詢SQLite中工作,你用什麼數據庫?

+0

對不起,剛剛爲SQL Server標記了問題,並且這看起來不起作用在SQL Server上。 – Vicki