我如何在每周开始时查询值?

时间:2018-12-04 04:04:44

标签: sql amazon-athena presto

我正在尝试运行一个查询,该查询在每个日历周开始时返回库存水平。更具体地说,我想查找每个日历周开始之前的最后一个事件。

SELECT *
FROM (
  SELECT *, rank() OVER (PARTITION BY sku, warehouse
                    ORDER BY timestamp DESC) AS rnk
  FROM inventory_value
  WHERE timestamp < CAST('2018-11-01' as DATE)
) WHERE rnk = 1

查询应该是这样的,除了我希望在开始日期之后的每个星期都使用该查询。

示例输入数据如下

    sku         warehouse   timestamp               SOH
1   12345678    W31         2018-09-25 14:00:00.000 2322
2   12345678    W31         2018-11-16 00:00:00.000 0

在每个星期的开始,我想返回紧接其前的那一行。

例如,在11月16日之前的每个星期,我希望它在9月返回活动,但是在11月16日之后的所有几周,我都希望从16日开始参加该活动。

我很高兴为查询提供开始日期,但是对于我的应用程序,我无法每周修改查询。

预先感谢

2 个答案:

答案 0 :(得分:0)

这里是做到这一点的一种方法。

在原始查询中,您将选择按date_trunc(week,timestamp)进行记录分区,然后按时间戳字段排序

SELECT *
 FROM (
      SELECT *
             ,rank() OVER (PARTITION BY sku
                                       ,warehouse
                                       ,date_trunc('week',timestamp)
                               ORDER BY timestamp DESC) AS rnk
        FROM inventory_value      
      )x
WHERE x.rnk = 1

答案 1 :(得分:0)

查看是否有效

SELECT *
FROM (
  SELECT *, rank() OVER (PARTITION BY sku,warehouse, to_char(trunc(timestamp) - 7/24,'IW'),
                    ORDER BY timestamp DESC) AS rnk
  FROM inventory_value
  WHERE timestamp < (select MAX(timestamp ) from inventory_value)
) WHERE rnk = 1