首先,描述我的数据集。我正在使用SNOMED CT代码并试图从中创建一个可用的列表。相关列是rowId,conceptID和Description。 rowId是唯一的,另外两个不是。我想选择这些代码的一个非常具体的子集:
SELECT *
FROM SnomedCode
WHERE LENGTH(Description)=MIN(LENGTH(Description))
GROUP BY conceptID
结果应该是400,000个唯一概念ID(140万个)中的列表,以及每个代码的最短适用描述。上面的查询显然是格式错误的(并且只返回LENGTH(description)= 1的行,因为表中最短的描述是1个字符长。)我缺少什么?
答案 0 :(得分:3)
SELECT conceptID, MAX(Description)
FROM SnomedCode A
WHERE LENGTH(Description)=(SELECT MIN(LENGTH(B.Description))
FROM SnomedCode B
WHERE B.conceptID = A.conceptID)
GROUP BY conceptID
“GROUP BY”和“MAX(描述)”并不是必需的,但是作为决胜局添加为具有相同长度的概念ID的不同描述,因为要求包括独特的 conceptIDs。
选择MAX来惩罚可能的领先空间。否则MIN(描述)也可以。
顺便说一下,如果你有超过百万的记录,这个查询需要相当长的时间。使用WHERE子句中添加的( concept-of-conceptIDs-to-test )中的“AND conceptID”进行测试。表SnomedCode必须具有conceptID的索引。如果没有,查询将永远。