我可以使用日期和日期间隔作为关键参数来连接Athena上的表吗?

像这样,

select *
from [table1] A
left join [table2] B on B.Date between A.Data_Begins and A.Data_Ends

没什么,只是想解决一个问题.

推荐答案

雅典娜是基于Presto/Trino的,至少后者支持它,你自己试试吧:

-- sample data
with dataset(id, dt_start, dt_end) as (
    values ('key1', date '2023-02-01', date '2023-02-10'),
           ('key3', date '2023-02-08', date '2023-03-10')
),
dataset2(num, dt) as (
    values (1, date '2023-02-01'),
           (2, date '2023-02-09'),
           (3, date '2023-03-10'),
           (4, date '2023-03-12')
)

-- query
select *
from dataset d 
left join dataset2 d2 on d2.dt between d.dt_start and d.dt_end;

输出:

id dt_start dt_end num dt
key1 2023-02-01 2023-02-10 1 2023-02-01
key1 2023-02-01 2023-02-10 2 2023-02-09
key3 2023-02-08 2023-03-10 2 2023-02-09
key3 2023-02-08 2023-03-10 3 2023-03-10

Sql相关问答推荐

在SQL中将相同且紧挨着的元素进行分组

使用WHERE子句进行筛选时,SQL SELECT查询返回总计数

当一个视图在Postgres中失效时?

如何在PostgreSQL中对第1,1,1,1,2,2,2,2行进行编号

SQL计数条目大于日期,包括交叉表中的零

Oracle分层查询-两条路径在末尾合并为一条

Oracle 23c ROUND,数据类型为DATE

从单个表达式中的分隔字符串中取平均值

VS代码无法识别SQL代码中带括号的字符串

根据时间值提取记录

计算不同模式的时间跨度

AdventureWorks 查询

将时间戳四舍五入到最近 10 分钟的查询

基于 Snowflake 的最大值创建新列

将表格和字符串连接以 for each 记录生成订单项目

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

雅典娜弄错了操作顺序

如何在一个存储过程中创建全局临时表,并在另一个存储过程中使用它

奇怪的甲骨文行为

在sql server中创建唯一标识符列