在T-SQL中为每个组选择最短的列

时间:2018-07-27 22:51:20

标签: sql sql-server tsql

所以我的表有一个NVARCHAR(MAX)列,其中每个条目(路径)都以一个标识符为前缀,例如,带有N个标识符:

id-1\path\to\stuff
id-1\different\path
...
id-2\path\to\stuff
id-2\different\path
...
id-N\path\to\stuff
id-N\different\path
...

我很难提出一个查询来为每个标识符选择一行,并且通过在标识符组中包含最短路径(包括该行中的其他列)来选择每一行。

因此,查询的结果将是总共N行,每个标识符一行,并根据最短的总体路径长度选择行。

我觉得我缺少明显的东西,但是我不确定它是什么。

1 个答案:

答案 0 :(得分:4)

您需要计算反斜杠。您可以使用IEnumerator Movement() { while (true) { Debug.Log("Some action"); yield return new WaitForSeconds(0.8f); } } len()来做到这一点。所以:

replace()

select t.* from (select t.*, row_number() over (partition by id order by len) as seqnum from t cross apply ( values (len(path) - len(replace(path, '/', ''))) ) v(len) ) t where seqnum = 1; 只是为查询命名表达式的一种便捷方法。它通过比较带斜线和不带斜线的路径的长度来计算斜线的数量(“路径长度”)。然后cross apply根据row_number()对eah id的行进行排序,最短的len得到len的值。