[SQL] SQL 서버는 가장 최근의 값을 사용하여 별개의 행을 선택
SQLSQL 서버는 가장 최근의 값을 사용하여 별개의 행을 선택
나는 다음과 같은 열이있는 테이블이
데이터의 일부는 다음과 같이 보일 수 있습니다 :
1, 1, 'EmailPreference', 'Text', 1/1/2010
2, 1, 'EmailPreference', 'Html', 1/3/2010
3, 1, 'EmailPreference', 'Text', 1/10/2010
4, 2, 'EmailPreference', 'Text', 1/2/2010
5, 2, 'EmailPreference', 'Html', 1/8/2010
나는 가장 최근의 값을 결정하기 위해 만든 열을 사용하여 각 별개의 ForeignKeyId andAttributeName의의 AttributeValue 컬럼의 가장 최근의 값을 끌어 쿼리를 실행하고 싶습니다. 출력 예는 다음과 같습니다
ForeignKeyId AttributeName AttributeValue Created
-------------------------------------------------------
1 'EmailPreference' 'Text' 1/10/2010
2 'EmailPreference' 'Html' 1/8/2010
어떻게 2005 SQL Server를 사용하여이 작업을 수행 할 수 있습니까?
해결법
-
==============================
1.일방 통행
일방 통행
select t1.* from (select ForeignKeyId,AttributeName, max(Created) AS MaxCreated from YourTable group by ForeignKeyId,AttributeName) t2 join YourTable t1 on t2.ForeignKeyId = t1.ForeignKeyId and t2.AttributeName = t1.AttributeName and t2.MaxCreated = t1.Created
쿼리 이런 종류의 작업을 수행하는 5 가지 방법에 대한 집계 된 컬럼의 관련 값을 포함 참조
-
==============================
2.사용하다:
사용하다:
SELECT x.foreignkeyid, x.attributename, x.attributevalue, x.created FROM (SELECT t.foreignkeyid, t.attributename, t.attributevalue, t.created, ROW_NUMBER() OVER (PARTITION BY t.foreignkeyid, t.attributename ORDER BY t.created DESC) AS rank FROM TABLE t) x WHERE x.rank = 1
CTE를 사용 :
WITH summary AS ( SELECT t.foreignkeyid, t.attributename, t.attributevalue, t.created, ROW_NUMBER() OVER (PARTITION BY t.foreignkeyid, t.attributename ORDER BY t.created DESC) AS rank FROM TABLE t) SELECT x.foreignkeyid, x.attributename, x.attributevalue, x.created FROM summary x WHERE x.rank = 1
또한:
SELECT t.foreignkeyid, t.attributename, t.attributevalue, t.created FROM TABLE t JOIN (SELECT x.foreignkeyid, x.attributename, MAX(x.created) AS max_created FROM TABLE x GROUP BY x.foreignkeyid, x.attributename) y ON y.foreignkeyid = t.foreignkeyid AND y.attributename = t.attributename AND y.max_created = t.created
from https://stackoverflow.com/questions/3442931/sql-server-select-distinct-rows-using-most-recent-value-only by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의에서 INTERSECT (0) | 2020.04.15 |
---|---|
[SQL] DISTINCT 여러 열을 선택 MYSQL (0) | 2020.04.15 |
[SQL] 어떻게 피벗 행과 열로 (사용자 정의 회전) (0) | 2020.04.15 |
[SQL] 두 날짜 사이의 계산 업무 시간 (0) | 2020.04.15 |
[SQL] 합니까 MySQL은 MSSQL처럼 @@ ROWCOUNT에 해당하는가? (0) | 2020.04.14 |