给定一列或十进制数以及一个整数列表,编写一个SQL查询以返回小于列表中每个整数的最大小数.

decimal
0.21312
2.34353
23.4534
34.3423
1231.00
1231.15
3213.32
23123.5

integer_list = [2,50,2000]

因此,SQL查询应该返回如下所示的列:

decimal
0.21312
34.3423
1231.15

以下是我的try :

WITH get_2    AS (SELECT MAX(decimal) FROM table WHERE decimal < 2  ),
     get_50   AS (SELECT MAX(decimal) FROM table WHERE decimal < 50 ),
     get_2000 AS (SELECT MAX(decimal) FROM table WHEREdecimal < 2000),
SELECT * FROM get_2
UNION ALL 
SELECT * FROM get_50
UNION ALL 
SELECT * FROM get_2000

有没有更优雅的方式来做到这一点?

此外,假设我不知道整数列表的长度,我应该如何着手呢?

推荐答案

这是一种使用CROSS JOINUNNEST来完成此操作的方法:

select lm, max(decimal) as max
from table
cross join UNNEST([2,50,2000]) as lm
where decimal < lm
group by lm

结果:

lm max
2 0.21312
50 34.3423
2000 1231.15

Sql相关问答推荐

判断Pyspark生成的SQL查询

更新在两个或多个面中具有交点的面

有没有办法用SQL编写一条CASE语句,如果列A&>0,那么列B,列C=0

在多个联合中使用相同的SELECT SQL查询

如何在snowflake中进行SQL的反向填充

了解放置时的连接

找到最新的连线

对于多字节字符,SQL Server中的DATALENGTH返回1字节

如何使子查询在UPDATE语句期间获得最新更新

查询以从时间范围列表中查找唯一时间段

对于小数据集,EF / SQL 语句花费的时间太长

如何解释 SQL Server 中的 Foxpro 语法?

计算组内多个日期间隔go 年的累计天数

根据要过滤的列的值进行联接和分组

Clickhouse:左连接表到外部数组

在Snowflake中,如何将以逗号和连字符分隔的多个混合数值拆分成数字列表

当该日期的至少两条记录具有相同的持续时间或至少一条记录的持续时间为 0 时,如何标记该日期的所有记录

存储过程 - 动态 SQL 中不同列值的计数

当计数为 0 时显示行

Lag() 获取snowflake的值变化