我有两张桌子:
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表中的审核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
)
答案 0 :(得分: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
。
答案 1 :(得分: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)