使用SQL查找可从给定范围整除的最小正数

使用SQL查找可从给定范围整除的最小正数,sql,sql-server,numbers,range,division,Sql,Sql Server,Numbers,Range,Division,例如:2520是最小的正数,它被1到10之间的每个数字所除 请帮助我使用SQL查找1到20之间的最小正数,它是13693680 假设结果小于15 000 000 000 with number as ( SELECT TOP (6000) CONVERT(BIGINT, ROW_NUMBER() OVER (ORDER BY s1.object_id)) * 2520 as n FROM sys.all_objects AS s1 CROSS JOIN sys.all

例如:2520是最小的正数,它被1到10之间的每个数字所除

请帮助我使用SQL查找1到20之间的最小正数,它是13693680

假设结果小于15 000 000 000

with
number as (
SELECT TOP (6000) 
    CONVERT(BIGINT, ROW_NUMBER() OVER (ORDER BY s1.object_id)) * 2520 as n
FROM
    sys.all_objects AS s1 
    CROSS JOIN sys.all_objects AS s2
)
select
   min(n),
   max(n),
   min(
   case
   when n%20 + n%19 + n%18 + n%16 + n%15 + n%14 + n%13 + n%12 + n%11 = 0 then n
   end)
from
   number
暴力:

with
number as (
SELECT TOP (15000000) 
    CONVERT(BIGINT, ROW_NUMBER() OVER (ORDER BY s1.object_id)) as n
FROM
    sys.all_objects AS s1 
    CROSS JOIN sys.all_objects AS s2
    CROSS JOIN sys.all_objects AS s3
)
select
   min(n),
   max(n),
   min(
   case
   when n%20 + n%19 + n%18 + n%16 + n%15 + n%14 + n%13 + n%12 + n%11 + n%10 + n%9 + n%8 + n%7 + n%6 + n%5 + n%4 + n%3 + n%2 + n%1 = 0 then n
   end)
from
   number
;
==>很长

假设解决方案是10的倍数:

with
number as (
SELECT TOP (1500000) 
    CONVERT(BIGINT, ROW_NUMBER() OVER (ORDER BY s1.object_id)) * 10 as n
FROM
    sys.all_objects AS s1 
    CROSS JOIN sys.all_objects AS s2
    CROSS JOIN sys.all_objects AS s3
)
select
   min(n),
   max(n),
   min(
   case
   when n%20 + n%19 + n%18 + n%16 + n%15 + n%14 + n%13 + n%12 + n%11 + n%10 + n%9 + n%8 + n%7 + n%6 + n%5 + n%4 + n%3 + n%2 + n%1 = 0 then n
   end)
from
   number
;
只需快10倍

假设结果是2520的倍数(最小正值除以1到10的每个数字)和6000*2520>15000)


非常快(比第一个方案快约x2520)。

请添加一些代码,显示您已经尝试过的内容!尝试使用c逻辑。但它的错误方式已经被告知。