SQL Server 2016을 사용하고 있으며 소비하는 데이터의 형식은 다음과 같습니다.
CREATE TABLE #tab (cat CHAR(1), t CHAR(2), val1 INT, val2 CHAR(1));
INSERT INTO #tab VALUES
('A','Q1',2,NULL),('A','Q2',NULL,'P'),('A','Q3',1,NULL),('A','Q3',NULL,NULL),
('B','Q1',5,NULL),('B','Q2',NULL,'P'),('B','Q3',NULL,'C'),('B','Q3',10,NULL);
SELECT *
FROM #tab;
나는이 칼럼을 통해 지난 null 이외의 값을 얻을 싶습니다 val1
및 val2
그룹화 cat
에 의해 주문 t
. 내가 찾고있는 결과는
cat val1 val2 A 1 P B 10 C
내가 가장 가까운 것은 주문 된 마지막 null이 아닌 값이 필요하기 때문에 작동하지 않는 것을 LAST_VALUE
무시하면서 사용 하는 ORDER BY
것입니다.
SELECT DISTINCT
cat,
LAST_VALUE(val1) OVER(PARTITION BY cat ORDER BY (SELECT NULL) ) AS val1,
LAST_VALUE(val2) OVER(PARTITION BY cat ORDER BY (SELECT NULL) ) AS val2
FROM #tab
cat val1 val2 A NULL NULL B 10 NULL
실제 테이블에는 cat
널이 아닌 마지막 값을 선택하기 위한 더 많은 열 (날짜 및 문자열 열)과 더 많은 열 (날짜, 문자열 및 숫자 열)이 있습니다.
이 선택을하는 방법에 대한 아이디어가 있습니다.
@ ypercubeᵀᴹ 아니오, 누락 된 Q4 값이 없으며
—
Edmund
t
값이 반복됩니다. 데이터가 제대로 작동하지 않습니다.
그래도 괜찮지 만 완벽한 주문을 결정하는 주문을 제공해야합니다.
—
ypercubeᵀᴹ
PARTITION BY cat ORDER BY t, id
예를 들어. 그렇지 않으면 동일한 쿼리 (모든 쿼리)가 별도의 실행에서 다른 결과를 제공 할 수 있습니다. 표의 열이 표시되는 열인 경우 결정적인 순서를 갖는 방법을 알 수 없습니다!
@ ypercubeᵀᴹ 거기에 도전이 있습니다. 데이터에 id 열이 없습니다. 여러 그룹화 열, 그룹 순서 내에서 사용할 수있는 문자열 열 및 널이있는 여러 값 열이 있습니다.
—
Edmund
SQL Server에 행의 순서를 결정적으로 알려줄 수없는 경우이 데이터 소비자는 어떻게 차이를 알 수 있습니까?
—
Aaron Bertrand
cat
정렬했습니다t
.