Как рассчитать значение LCM с помощью SQL Server? - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть данные ниже, и мне нужно вычислить значение LCM (самое низкое значение для умножения) на основе идентификатора группы, используя запрос T-SQL. Ваша помощь будет оценена.

Groupid GroupValue
------------------
1        2
1        4
1        6
2        5
2        5
2       10
3        3
3       12
3        6
3        9

Ожидаемый результат ниже.

Groupid   GroupLCM
------------------
   1        12
   2        10
   3        36

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Я нашел решение, которое выкладываю на вопросе о стеке ниже. В итоговой таблице результатов мы просто снова используем максимальное значение id группы и получаем значение LCM.

Просто обратите внимание, как, я отправляю этот вопрос для более оптимизированного решения, чтобы удалить для цикла, в противном случае он работает должным образом, используя для цикла также.

Как обновить столбец без цикла в SQL Server?

0 голосов
/ 12 сентября 2018

Один из возможных способов - использовать таблицы подсчета, как показано ниже

См. Рабочую демонстрацию

; with detailedSet as 
(
    select 
        Groupid,
        GroupValue=abs(GroupValue),
        biggest=max(GroupValue) over (partition by Groupid),
        totalNumbers= count(1) over (partition by Groupid)
    from num
    )
,   
possibleLCMValues as 
(
    select Groupid, counter
    from detailedSet b
    cross apply 
    (
select counter= row_number() over ( order by (select null))  * biggest 
from sys.objects o1 cross join sys.objects o2
)c
where c.counter%GroupValue =0
group by Groupid, counter
having count(1)=max(totalNumbers)
)
,
LCMValues as
(
    select 
        Groupid,
        LCM=min(counter) 
    from possibleLCMValues
    group by Groupid
)

select * from LCMValues
...