Sql Oracle-如何对不同的行进行排序?
我试图先对记录进行排序,然后使用oracle上的单个查询对它们进行区分(区分PersonID,但获取整行内容时不使用重复的PersonID)Sql Oracle-如何对不同的行进行排序?,sql,oracle,Sql,Oracle,我试图先对记录进行排序,然后使用oracle上的单个查询对它们进行区分(区分PersonID,但获取整行内容时不使用重复的PersonID) 在示例中:按记录类型排序(首先是p),然后获取不同的PersonID列表 情况1的预期结果: (1,'John', 'Doe', 2,'P' ); (2,'Scot', 'Mic', 1,'P' ); 情况2的预期结果: (1,'John', 'Doe', 1,'S' ); (2,'Scot', 'Mic', 1,'P' ) Sql: 我想你需要的
在示例中:按记录类型排序(首先是p),然后获取不同的PersonID列表
情况1的预期结果:
(1,'John', 'Doe', 2,'P' );
(2,'Scot', 'Mic', 1,'P' );
情况2的预期结果:
(1,'John', 'Doe', 1,'S' );
(2,'Scot', 'Mic', 1,'P' )
Sql:
我想你需要的是一个分析性的
行号()
SELECT PersonID, LastName, FirstName, RecordId, RecordType
FROM (SELECT PersonID, LastName, FirstName, RecordId, RecordType,
ROW_NUMBER() OVER (PARTITION BY PersonID ORDER BY RecordType ASC) AS rn
FROM test_records) t
WHERE rn = 1
您正在使用什么RDBMS?该问题当前标记为,但也标记为,表示使用MS SQL Server或Sybase。如果您使用的是Oracle(如本文所述),则应使用varchar2()
,而不是varchar()
。我正在删除tsql
标记,因为它(通常)不用于Oracle数据库。
SELECT PersonID, LastName, FirstName, RecordId, RecordType
FROM (SELECT PersonID, LastName, FirstName, RecordId, RecordType,
ROW_NUMBER() OVER (PARTITION BY PersonID ORDER BY RecordType ASC) AS rn
FROM test_records) t
WHERE rn = 1