【问题标题】:how to filter only by the ids from column a that have all the values ​in column b如何仅通过 a 列中具有 b 列中所有值的 id 进行过滤
【发布时间】:2020-03-25 18:30:21
【问题描述】:

能否请我就如何在 Presto SQL 中仅通过在 b 列中具有所有值的值(来自 a 列)进行过滤提供一些指导?

因此,我希望在promotion_running_days 列中按日期获取所有促销日(从1 到9)的所有product_id。

我尝试在 (1,2,3,4,5,6,7) 中使用 'promotion_running_days,但它也返回 product_ids 只有 2 或 3 个促销日。

使用这种查询方式:

SELECT
    product_id
    ,date
    ,ROUND(MAX(DATE_DIFF('day', CAST(DATE_PARSE(promotion_start_date, '%Y-%m-%d %T') AS DATE), CAST(DATE_PARSE(date, '%Y-%m-%d') AS DATE))),0) AS promotion_running_days
    ,SUM(revenue) AS total_revenue    
FROM product_db 
 WHERE
        date  between '2019-01-01' and '2019-01-07' 
        AND promotion_start_date>='2019-01-01' 
Group by 1,2;

我希望我的输出如下所示:

Product Id  |Date|       |Promotion Running Days|

1          |2019-01-01|    |1|
1          |2019-01-02|    |2|
1          |2019-01-03|    |3|
1          |2019-01-04|    |4|
1          |2019-01-05|    |5|
1          |2019-01-06|    |6|
1          |2019-01-07|    |7|

【问题讨论】:

    标签: sql presto


    【解决方案1】:

    我希望按日期获取所有促销日的所有 product_id

    您似乎想要聚合。假设您每个日期最多有一行:

    SELECT product_id, SUM(revenue) AS total_revenue    
    FROM product_db 
    WHERE date  between '2019-01-01' and '2019-01-07' and
          promotion_start_date>='2019-01-01' 
    GROUP BY product_id
    HAVING COUNT(*) = 7;  -- 7 == all days
    

    但是,您的样本结果表明row_number()

    select product_id, date,
           row_number() over (partition by product_id order by date)
    from product_db
    order by product_id, date;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      相关资源
      最近更新 更多