簡體   English   中英

SQL查詢選擇每組前5名,從而導致Access凍結簡單代碼和小數據

[英]SQL query select top 5 per group leading Access to freeze on simple code and small data

我試圖從組SQL中重現select top n,但是即使對於少量數據,訪問也會凍結( 需要幾分鍾才能完成 )。

date         ret1         anndate

26-Jul-13   0.999214    25-Jul-13
29-Jul-13   0.982684    25-Jul-13
30-Jul-13   0.947938    25-Jul-13
31-Jul-13   1.024081    25-Jul-13
01-Aug-13   1.017739    25-Jul-13
02-Aug-13   1.001621    25-Jul-13
10-Dec-13   0.965405    09-Dec-13
11-Dec-13   1.009705    09-Dec-13
12-Dec-13   1.025508    09-Dec-13
13-Dec-13   0.994232    09-Dec-13
16-Dec-13   1.009065    09-Dec-13
17-Dec-13   0.984549    09-Dec-13
18-Dec-13   1.007299    09-Dec-13

我想要實現的是每個“日期”有以下五個行。 例如,對於2013年7月25日的日期,我想要前5行。 對於2011年12月9日的日期,我希望以下5行在2013年12月16日結束。

我的代碼是:

SELECT *
FROM com
WHERE date in 
(select top 5 date from com where com.date>com.anndate);

但這會導致崩潰( 更正:應該是“花幾分鍾才能完成” )。 任何人都可以幫助指出哪里出了問題?

更新:

我將列名[date]更改為[cdate],但仍然無法使用。

我執行了以下類似的簡單操作,但仍然需要幾分鍾才能完成。

SELECT *
FROM com
WHERE cdate in (select cdate from com )

我將示例數據存儲在一個表中, datedate anndate日期/時間數據類型。 然后,我使用從相關子查詢生成的anndate_rank構建了一個查詢。 anndate_rank的用途是每個anndate組中的等級編號。

然后,整個查詢成為新查詢中的子查詢,該子查詢選擇anndate_rank <=最高限制---我選擇了前2名而不是前5名。

這是查詢的結果集,查詢如下:

date       ret1     anndate   anndate_rank
---------- -------- --------- ------------
7/26/2013  0.999214 7/25/2013            1
7/29/2013  0.982684 7/25/2013            2
12/10/2013 0.965405 12/9/2013            1
12/11/2013 1.009705 12/9/2013            2
SELECT
    sub.date,
    sub.ret1,
    sub.anndate,
    sub.anndate_rank
FROM
    (
        SELECT
            c.date,
            c.ret1,
            c.anndate,
            (
                SELECT Count(*)
                FROM com AS c2
                WHERE
                        c2.anndate=c.anndate
                    AND c2.date<=c.date
            ) AS anndate_rank
        FROM com AS c
    ) AS sub
WHERE sub.anndate_rank<=2;

請注意,此方法假定在任何anndate組中都沒有重復的date值,如示例數據中那樣。 如果您的真實數據確實包含重復的date / anndate對,則此查詢將不會為您提供所需的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM