ID UserID TYPE PASS DATE
1 12 TRACK1 1 20140101
2 32 TRACK2 0 20140105
3 43 PULL1 1 20140105
4 66 PULL2 1 20140110
5 54 PULL1 0 20140119
6 54 TRACK1 0 20140120
因此,用户可以多次尝试“类型”,因此他们可以多次“TRACK1”,或多次“PULL2”。
我想为每个用户返回每个唯一“类型”的第一个PASS(1)。
我想返回pass和fail行,但只返回pass或fail的第一个实例。
我该怎么做?
样本表和输出
ID UserID TYPE PASS DATE
1 12 TRACK1 1 20140101
2 12 TRACK2 0 20140105
3 12 PULL1 1 20140105
4 12 PULL2 1 20140110
5 12 PULL1 0 20140119
6 12 TRACK1 0 20140120
7 12 TRACK1 0 20140121
8 12 PULL1 1 20140115
9 12 TRACK2 0 20140125
output:
1 12 TRACK1 1 20140101
2 12 TRACK2 0 20140105
3 12 PULL1 1 20140105
4 12 PULL2 1 20140110
答案 0 :(得分:4)
select t1.*
from UserTrackStatus t1
join
(
select userid,
type,
min(date) as min_date
from UserTrackStatus
group by userid, type
) t2 on t1.userid = t2.userid and t1.type = t2.type and t1.date = t2.min_date
答案 1 :(得分:1)
只需使用CTE和ROW_NUMBER
来识别哪个记录首先 p>
;
WITH cte
AS (
SELECT *
,ROW_NUMBER() OVER ( PARTITION BY [UserID], [Type] ORDER BY [date] ASC ) AS rn
FROM MyTable
WHERE PASS = 1
)
SELECT *
FROM cte
WHERE rn = 1