从表重复第一个值中选择两个键的组合

时间:2013-10-18 06:21:54

标签: sql tsql select self-join

我想将一些现有数据传输到新数据表中。

我有替换表: - ID - currentItemId - formerItemId - contentId

对于相同的内容,我可能有多个条目用于组合currentItemId和formerItemId。

让我说明现在的情况:

ID_T1   currentItemId          formerItemId contentId
1    100           200          300
2    100           200          301
3    100           200          302
4    105           201          303
5    105           201          304
6    110           205          320
7    111           206          321
8    120           204          322
9    130           208          323
10   130           208          324

现在,我想为每个组合beforeItemId和currentItemId选择TOP ID:

ID  ID_T1 contentId
1    1    300
2    1    301
3    1    302
4    4    303
5    4    304
6    6    320
7    7    321
8    8    322
9    9    323
10   9    324

这两个表还包含时间戳和其他一些数据 - 我没有将其包含在示例中以便更容易理解。

我尝试了自我加入(没有成功),嵌套选择(给我原始组合的正确值,但它没有重复,它给我ID其他记录的NULL),但似乎没有任何效果。试过像:

SELECT di1.ID,
    (SELECT TOP(1) di1.ID
        FROM TABLE
        WHERE
        di1.currentItemtId = di2.currentItemtId AND di1.formerItemId = di1.formerItemId
        ) AS repeat
  ,di2.deleteItemId
  ,di1.currentitemtId
  ,di1.formerItemId
  ,di1.contentId

  FROM Table di1
  LEFT JOIN 
    Table di2 ON di1.ID = di2.ID

但这种方式ID不重复 - 我得到的ID与普通选择相同。

我正在使用SQL Server 2008。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

请尝试:

SELECT 
    MIN(ID) OVER (PARTITION BY currentItemId, formerItemId) ID, 
    currentItemId,
    formerItemId, 
    contentId 
FROM YourTable

SELECT 
    ID,
    MIN(ID) OVER (PARTITION BY currentItemId, formerItemId) ID_T1,
    contentId 
FROM YourTable