我正在处理一个小型报告应用程序。我有两张桌子
代理商表数据
AgentID AgentName
------- ---------
1001 ABC
1002 XYZ
1003 POI
1004 JKL
报告表格数据
ReportID AgentId Labor Mandays Amount SubmitDate
-------- ------- ----- ------- ------ ----------
1 1001 30 10 5000 11/12/2011
2 1001 44 18 8000 11/14/2011
3 1002 33 75 3022 11/12/2011
4 1001 10 10 1500 11/14/2011
5 1002 10 10 1800 11/14/2011
6 1001 10 10 1400 11/14/2011
7 1003 40 40 1500 11/14/2011
8 1003 40 40 1800 11/14/2011
我想生成一个报告,为我们提供类似
的输出ReportID AgentId Labor Mandays Amount SubmitDate
-------- ------- ----- ------- ------ ----------
1 1001 30 10 5000 11/12/2011
3 1002 33 75 3022 11/12/2011
6 1001 10 10 1400 11/14/2011
5 1002 10 10 1800 11/14/2011
8 1003 40 40 1800 11/14/2011
先谢谢
答案 0 :(得分:1)
您没有提到您正在使用的SQL Server VERSION - 如果您使用的是2005或更新版本,则可以使用{{1}的CTE(公用表表达式)功能:
ROW_NUMBER
此CTE按;WITH LastPerAgent AS
(
SELECT
AgentID, ReportID, Labor, Mandays, Amount, SubmitDate,
ROW_NUMBER() OVER(PARTITION BY AgentID,SubmitDate
ORDER BY ReportID DESC) AS 'RowNum'
FROM dbo.Report
)
SELECT
AgentID, ReportID, Labor, Mandays, Amount, SubmitDate,
FROM LastPerAgent
WHERE RowNum = 1
和AgentID
对您的数据进行“分区”,对于每个分区,SubmitDate
函数会发出序号,从1开始,按{{1}排序 - 所以每个ROW_NUMBER
对的“最后一行”(最高ReportID DESC
)得到ReportID
,这是我在后面的SELECT语句中从CTE中选择的。
PS:这对您的输入数据不起作用100%,因为您尚未定义如何分组以及如何消除行....您可能需要根据您的要求调整此查询。 ..