我有一张跟踪产品视图的表格.
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)
据我所知,我不能使用不同的,因为这是基于行的?
帮助赞赏.
每个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)
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |