MS SQL 2008在两列的组合上生成不同的ID

时间:2017-02-24 13:19:40

标签: sql sql-server select distinct

我在创建一个基于2列(材料和分析)的唯一组合返回最新行的查询时遇到了问题,而旧的(按日期)组合被解除了。

我已经过滤了所需的列:

ID   Col1   Col2    Col3    MaterialID  Material    AnalysisID      FKS
126  E006   E5       e3        44         PPL           39        Density
126  E006   E5       e3        44         PPL           107       Presure
126  E006   E5       e3        44         PPL           95        Amount of C
126  E006   E5       e2        44         PPL           95        Amount of C

所以第四行应该被驳回,因为我们对PPL的数量有更新的材料分析。

我当前的查询如下所示:

   SELECT TOP 100
      a.[ID]
      ,a.[Col1]
      ,a.[Col1]
      ,a.[Col1]
      ,b.[MaterialID]
      ,b.[Material]
      ,b.[AnalysisID]   
   FROM [Table1] a

  INNER JOIN
  [Table2] b
ON
a.[ID]=b.[MaterialID]

WHERE a.[Col1] like '%E%'
ORDER BY
  b.[Date] DESC

感谢您的贡献。 如果我没有说清楚,我会尝试澄清。

BR

1 个答案:

答案 0 :(得分:1)

这需要row_number()

SELECT *
FROM (SELECT . . .  ,
             ROW_NUMBER() OVER (PARTITION BY Material, AnalysisID
                                ORDER BY date DESC
                               ) as seqnum
      FROM [Table1] a INNER JOIN
           [Table2] b
           ON a.[ID] = b.[MaterialID]
      WHERE a.[Col1] like '%E%'
     ) ab
WHERE seqnum = 1;