我正在尝试运行一个查询,该查询在每个日历周开始时返回库存水平。更具体地说,我想查找每个日历周开始之前的最后一个事件。
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日开始参加该活动。
我很高兴为查询提供开始日期,但是对于我的应用程序,我无法每周修改查询。
预先感谢
答案 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