[英]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 )
我將示例數據存儲在一個表中, date
和date
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.