j.s*_*ell 2 sql t-sql sql-server sql-server-2005
我需要一些SQL Server 2005 SQL查询的帮助.以下是要查询的表中数据的示例:
Id PersonId PayrollNum ContractId PayrollFrom PayrollTo --------------------------------------------------------------------------- 1 432642 85110892 1 01/05/2009 31/05/2009 2 432642 85110892 1 01/06/2009 30/06/2009 3 432642 85110892 1 01/07/2009 31/07/2009 4 432642 85110892 2 01/05/2009 31/05/2009 5 432642 85110892 2 01/06/2009 30/06/2009 6 432642 85110892 2 01/07/2009 31/07/2009 7 432642 85110892 2 01/08/2009 31/08/2009 8 432642 35110892 1 01/06/2009 30/06/2009 9 432642 35110892 1 01/05/2009 31/05/2009 10 432642 35110892 1 01/07/2009 31/07/2009
(我希望格式化好 - 用这个东西做表很难!)
我需要的输出如下:
Id -- 1 4 9
一个解释:我基本上需要的是针对不同的被记录的唯一的ID值PersonId
,PayrollNum
并且ContractId
也是最低的PayrollFrom
为每个分组日期.我不确定如何更好地解释它?希望您可以查看输出以帮助理解查询的要求.
让我知道我是否需要更好地解释这一点(或者如果你认为你理解它并且可以更好地解释它,请这样做).
谢谢你的帮助,詹姆斯.
WITH CTE AS (
SELECT
/* uncomment if needed PersonId, PayrollNum, ContractId, PayrollFrom, */
ID,
ROW_NUMBER() OVER (
PARTITION BY PersonId, PayrollNum, ContractId
ORDER BY PayrollFrom ASC -- thank you to Peter Lang DESC
) AS Ranking
FROM
MyTable
)
SELECT
ID
FROM
CTE
WHERE
Ranking = 1
Run Code Online (Sandbox Code Playgroud)
评论后编辑
尝试类似的东西,ISNULL(PersonId, -ID)
而不是PersonId
强制它唯一区分每个NULL.我使用-ID
它不应该在ID =有效PersonID的地方发生冲突
归档时间: |
|
查看次数: |
171 次 |
最近记录: |