Spark SQL-如何对链接到特定日期的日期范围内的值求和

保罗·霍姆

我需要对每个商店中每个产品的最近30天(不包括该日期)的值进行总计。假设所有月份都为30天:

date|store|product|values
2020-06-30|Store1|Product1|1
2020-07-02|Store1|Product2|4
2020-07-01|Store2|Product1|3
2020-07-18|Store1|Product1|4
2020-07-18|Store1|Product2|2
2020-07-18|Store2|Product1|2
2020-07-30|Store1|Product1|1
2020-08-01|Store1|Product1|1
2020-08-01|Store1|Product2|1
2020-08-01|Store2|Product1|6

在2020-08-01天的行中,将(2020-08-20-30天)的值相加到2020-08-19,然后将其放在2020-08-20行中,如下所示:(第一行不't include'2020-06-30'是因为已经超过30天了,而'2020-08-01'是因为是同一天,所以继续...)

date|store|product|sum_values_over_last_30_days_to_this_date
2020-08-01|Store1|Product1|5
2020-08-01|Store1|Product2|6
2020-08-01|Store2|Product1|5
....

在下面尝试了这一点,也没有做过

spark.sql("""
SELECT 
a.date,
a.store,
a.product,
SUM(a.values) OVER (PARTITION BY a.product,a.store ORDER BY a.date BETWEEN a.date - INTERVAL '1' DAY AND a.date - INTERVAL '30' DAY) AS sum
FROM table a
""").show()

有人可以帮助我吗?

阿萨夫

您可以尝试使用self-join而不是窗口功能,也许这种方法join可以工作-

SELECT 
    a.date, 
    a.store,
    a.product,
    SUM(IFNULL(b.value,0))
FROM
    table a
LEFT JOIN
    (
        SELECT
            a.date, 
            a.store,
            a.product,
            a.value
        FROM
            table  a
    )b
ON
    a.store = b.store
AND
    a.product = b.product
AND
    a.date > b.date - INTERVAL 30 DAYS
AND a.date <= b.date
GROUP BY 
    1,2,3

确保对内部查询中的值求和,直到今天为止。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Spark SQL中按日期分组聚合

如何在Spark SQL中按日期范围过滤

SQL选择特定日期范围内的生日

SQL查询2个表,在给定日期范围内两个表的值都不相同

使用日期范围对分区数据执行Spark SQL查询

SQL Server Group在日期范围内的日期和时间

SQL查找日期范围内的计数

如何在特定日期范围内对熊猫列DataFrame中的某些值求和

SQL在日期范围内找到

使用jdbc在Oracle SQL中过滤特定日期范围内的数据

Spark SQL +日期操作

SQL查询以获取特定日期范围/期间的时间范围内的记录

SQL:特定日期范围内的计数/总和列

如何从Spark中的分区实木复合地板文件中读取特定日期范围

在特定日期范围内的Python代码中的SQL选择查询

Access SQL查询-选择当月特定日期的日期范围

SQL:在给定日期范围内重复模式

两个相关表之间的SQL SELECT数据不在特定日期范围内

SQL:查找具有给定日期范围内每个月的数据的记录

使用两个特定日期范围内的最大记录过滤SQL表

PL / SQL函数可计算给定日期范围内的平均每月

SQL-计算状态在日期范围内保留的日期

SQL选择范围内的日期

SQL Server-查找给定日期范围内的活跃客户

SQL查询,用于查找某个日期范围内某个特定日期存在的所有记录

如何在 SQL Server 中查询特定日期范围内的数据

如何掌握spark sql

SQL查询+如何回顾特定日期

根据 ID 在最近的日期加入 Spark SQL