相关标量子查询只能包含与spark sql有关的相等谓词

相关标量子查询只能包含与spark sql有关的相等谓词,sql,scala,apache-spark,Sql,Scala,Apache Spark,我有50个左右的聚合子查询,所有查询都基于my_data和otherdata_data之间的不同参数,每个聚合将位于不同的日期范围和一些其他可能的因素。因为spark sql似乎不喜欢谓词子查询中的非等式,所以它是否可以在spark sql中执行此操作?如何将您的查询更改为: The correlated scalar subquery can only contain equality predicates 选择 数据2。*, 总和(当data1.my_date>data1.date_sub

我有50个左右的聚合子查询,所有查询都基于
my_data
otherdata_data
之间的不同参数,每个聚合将位于不同的日期范围和一些其他可能的因素。因为spark sql似乎不喜欢谓词子查询中的非等式,所以它是否可以在spark sql中执行此操作?

如何将您的查询更改为:

The correlated scalar subquery can only contain equality predicates
选择
数据2。*,
总和(当data1.my_date>data1.date_sub(CAST(data2.start_date as date),180)和data1.my_datedata1.date_sub(CAST(data2.start_date as date),160)和data1.my_datedata1.date_sub(CAST(data2.start_date as date),80)和data1.my_date
如何将您的查询更改为:

The correlated scalar subquery can only contain equality predicates
选择
数据2。*,
总和(当data1.my_date>data1.date_sub(CAST(data2.start_date as date),180)和data1.my_datedata1.date_sub(CAST(data2.start_date as date),160)和data1.my_datedata1.date_sub(CAST(data2.start_date as date),80)和data1.my_date
使用条件聚合:

select
    data2.*,
       sum(case when data1.my_date > data1.date_sub(CAST(data2.start_date as DATE), 180) and data1.my_date < data1.date_sub(CAST(data2.start_date as DATE), 90) then my_val end)  as changed_1,
       sum(case when data1.my_date > data1.date_sub(CAST(data2.start_date as DATE), 160) and data1.my_date < data1.date_sub(CAST(data2.start_date as DATE), 150) then my_val end) as changed_2,
       sum(case when data1.my_date > data1.date_sub(CAST(data2.start_date as DATE), 80) and data1.my_date < data1.date_sub(CAST(data2.start_date as DATE), 45) then my_val end) as changed_3
from
    otherdata_data data2
    join my_data data1
     on data2.id = data1.id
group by <all columns of otherdata_data table>
选择data1.id,
总和(当my_date>date_sub(CAST(数据2.start_date为日期)180)和my_datedate_sub(CAST(数据2.start_date为日期)160)和my_date

然后可以加入其他表(可能将其用作子查询)。

使用条件聚合:

select
    data2.*,
       sum(case when data1.my_date > data1.date_sub(CAST(data2.start_date as DATE), 180) and data1.my_date < data1.date_sub(CAST(data2.start_date as DATE), 90) then my_val end)  as changed_1,
       sum(case when data1.my_date > data1.date_sub(CAST(data2.start_date as DATE), 160) and data1.my_date < data1.date_sub(CAST(data2.start_date as DATE), 150) then my_val end) as changed_2,
       sum(case when data1.my_date > data1.date_sub(CAST(data2.start_date as DATE), 80) and data1.my_date < data1.date_sub(CAST(data2.start_date as DATE), 45) then my_val end) as changed_3
from
    otherdata_data data2
    join my_data data1
     on data2.id = data1.id
group by <all columns of otherdata_data table>
选择data1.id,
总和(当my_date>date_sub(CAST(数据2.start_date为日期)180)和my_datedate_sub(CAST(数据2.start_date为日期)160)和my_date

然后,您可以加入其他表(可能将其用作子查询)。

谢谢!对于分组依据,
otherdata\u data
是唯一的,让我们调用它们
col\u a
+
col\u b
我是否应该根据它进行分组?@asdasd32,仅根据您想要在SelectThank中的列进行分组谢谢!对于group by,
otherdata\u data
是唯一的,让我们调用它们
col\u a
+
col\u b
我是否应该按它进行分组?@asdasd32,仅按您希望在选择框中的列进行分组