1

我有两张桌子:

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

我想为每个与 Audit 表中的 Audit ID 匹配的不同 AuditID 选择前五个记录表。

我到目前为止的 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

您可以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 的 TOP 5 记录(最早的在前,DESC否则使用)。

于 2012-10-30T16:24:09.777 回答
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 回答