SQL Group By Question

izi*_*zip 0 sql sql-server

我有一张跟踪产品视图的表格.

TrackId ProductId CreatedOn
1       1         01/01/2011
2       4         01/01/2011
3       4         01/01/2011
4       10        01/01/2011
Run Code Online (Sandbox Code Playgroud)

我想要做的是返回一个没有两个ProductIds的数据集.我想从上面的数据集中返回IE:

TrackId ProductId CreatedOn
1       1         01/01/2011
2       4         01/01/2011
4       10        01/01/2011
Run Code Online (Sandbox Code Playgroud)

据我所知,我不能使用不同的,因为这是基于行的?

帮助赞赏.

gbn*_*gbn 6

每个ProductID 生成一个行号序列,取第一个

;WITH cte AS
(
    SELECT
       *,
       ROW_NUMBER() OVER (PARTITION BY ProductID ORDER BY TrackID) AS rn
    FROM
       MyProductTable
)
SELECT
   TrackId ProductId CreatedOn
FROM
   cte
WHERE
   rn = 1
Run Code Online (Sandbox Code Playgroud)

编辑:

如果要使用聚合,则首先需要单独的子查询以确保一致的结果.直接MIN不起作用.

这是基于我对这个问题的评论

"没有在两个相邻的行中生产.相邻由下一个/上一个Trackid定义"

SELECT
    M.*
FROM
    myProductTable M
    JOIN
    ( --gets the lowest TrackID for a ProductID
    SELECT ProductID, MIN(TrackID) AS MinTrackID
    FROM myProductTable
    GROUP BY ProductID
    ) M2 ON M.ProductID= M2.ProductID AND M.TrackID= M2.MinTrackID
Run Code Online (Sandbox Code Playgroud)