나는 득점 결과를 기록한 테이블을 가지고 있습니다. 결과 중 일부는 동일한 점수를가집니다. 모든 결과를 TrackingNumber로 그룹화하고 가장 낮은 점수를 가진 레코드를 선택하고 싶습니다. 그룹 내에 동점이있는 경우 (그룹의 최소 점수가 두 번 이상 발생 함) 선택하고 싶지 않습니다.쿼리에서 가장 좋은 결과를 얻으십시오
CREATE TABLE Dupe
(
Id INT NOT NULL IDENTITY(1, 1) PRIMARY KEY,
TrackingNumber INT NOT NULL,
Name VARCHAR(50),
Score INT NOT NULL
)
GO
INSERT INTO dbo.Dupe (TrackingNumber, Name, Score)VALUES (1, 'Name1', 1)
INSERT INTO dbo.Dupe (TrackingNumber, Name, Score)VALUES (1, 'Name1', 3)
INSERT INTO dbo.Dupe (TrackingNumber, Name, Score)VALUES (1, 'Name1', 3)
INSERT INTO dbo.Dupe (TrackingNumber, Name, Score)VALUES (1, 'Name1', 5)
INSERT INTO dbo.Dupe (TrackingNumber, Name, Score)VALUES (2, 'Name2', 1)
INSERT INTO dbo.Dupe (TrackingNumber, Name, Score)VALUES (2, 'Name2', 4)
INSERT INTO dbo.Dupe (TrackingNumber, Name, Score)VALUES (2, 'Name2', 9)
INSERT INTO dbo.Dupe (TrackingNumber, Name, Score)VALUES (4, 'Name4', 11)
INSERT INTO dbo.Dupe (TrackingNumber, Name, Score)VALUES (4, 'Name4', -55)
INSERT INTO dbo.Dupe (TrackingNumber, Name, Score)VALUES (4, 'Name4', -55)
원하는 출력 :
이| ID | TRACKINGNUMBER | NAME | SCORE |
---------------------------------------
| 1 | 1 | Name1 | 1 |
| 4 | 2 | Name2 | 1 |
누군가가이 작업을 수행하는 방법에 대한 올바른 방향으로 날 지점 수를 여기에 도움이되는 TSQL 설명입니까? (여러 분-점수가 인정되지 않기 때문에)
는;WITH tmp (tn, sc) AS
(
SELECT TrackingNumber, score
FROM dupe
GROUP BY TrackingNumber, score
HAVING COUNT(*) = 1
)
SELECT dupe.*
FROM dupe
INNER JOIN (
SELECT tn , MIN(sc) AS s
FROM tmp
GROUP BY tn
) t2 ON tn = trackingnumber AND s = score
CTE에 tmp
는 하나의 점수가 모든 레코드를 필터링 :
당신이 현재 테이블에서 찾고있는 결과를 지정할 수 있습니다 얻을? – Shade
이 데이터 세트로 원하는 출력을 표시 할 수 있습니까? – Tanner
"그룹에 넥타이가있는 경우 (그룹의 최소 점수가 두 번 이상 나타남) 선택하고 싶지 않습니다"라는 의미는 무엇입니까? 이것을 완전히 무시하고 싶습니까? 아니면 다음으로 높은 점수를 얻고 싶습니까? –