1

私は2つのテーブルを持っています:

Audit
AUDITID |  CUSTOMER  |  CUSTOMERNUMBER
001     |    BILLY   |  11111 
002     |    HOLLY   |  12222 
003     |    HOLLY   | 12222
004     |    DON     | 13333
005     |    DON     | 13333

Summary
AuditID | Summary | Date
001     |  1      |   30/1/2012
001     |  2      | 1/10/2012
001     | 3       |20/10/2012
004     | 4       | 2/09/2012
004     | 5       | 3/01/2012

監査テーブルからの監査 ID に一致する各異なる AuditID の上位 5 つのレコード テーブルを選択したいと考えています。

私がこれまでに持っているSQLスクリプトは次のとおりです。

    SELECT Auditid, summary, date
    FROM [Summary] SL1
    INNER JOIN [Audit] AL1 ON SL1.[AuditID] = AL1.[AuditID]  
    WHERE AL1.[AuditID] IN (  
    SELECT TOP 5 AuditID  
    FROM [Audit] AL2  
    WHERE AL1.[CustomerNumber] = AL2.[CustomerNumber]   
    ORDER BY AL2.[AuditID] DESC
    )  
4

2 に答える 2

0

要約から「上位」レコードを取得する順序を指定する必要があります。私は要約で行うことにしました。日付などで行うことができます。また、サンプルデータを使用して結果を表示するために top2 を実行しました。

select audit.auditid,Summary,DATE 
from 
    Audit inner join Summary Sum_Tab1 on Audit.AUDITID=Sum_Tab1.AUDITID 
where 
    Sum_Tab1.SUMMARY in 
        (SELECT top 2 SUMMARY from Summary Sum_Tab2 
            where Sum_Tab1.AUDITID=Sum_Tab2.AUDITID order by summary)
于 2012-10-30T16:42:10.027 に答える
0

ROW_NUMBERで使用できますPARTITION BY

WITH CTE AS
(
    SELECT Auditid, summary, date,
      ,  RN = ROW_NUMBER() OVER (PARTITION BY SL1.AuditID ORDER BY SL1.Date ASC)
    FROM [Summary] SL1
    INNER JOIN [Audit] AL1 ON SL1.[AuditID] = AL1.[AuditID]  
)
SELECT Auditid, summary, date FROM CTE
WHERE RN <= 5

これにより、AuditID ごとに上位 5 件のレコードが Date 順に並べられて返されます (古い順、それ以外のDESC場合)。

于 2012-10-30T16:24:09.777 に答える