Я хочу найти в своей таблице максимальное значение, которое меньше указанного в параметре, и получить количество строк, имеющих то же значение, что и максимальное значение. Например, в моей таблице есть значения: (4,1,3,1,4,4,10), и это список параметров в строке "2,9,10,4". Я должен разделить строку для разделения параметров. Основываясь на этом примере значений, я хочу получить что-то вроде этого:
param | max value | count
2 | 1 | 2
9 | 4 | 3
10 | 4 | 3
4 | 3 | 1
И это мой пример запроса:
select
[param]
, max([val]) [max_value_by_param]
, max(count) [count]
from(
select
n.value as [param]
,a.val
, count(*) as [count]
from (--mock of table
select 1 as val union all
select 3 as val union all
select 4 as val union all
select 1 as val union all
select 3 as val union all
select 4 as val union all
select 4 as val union all
select 10 as val
) a
join (select [value] from string_split('2,9,10,4', ',')) n--list of params
on a.val < n.[value]
group by n.value, a.val
) tmp
group by [param]
Можно ли сделать это лучше / проще?