Как запросить значение в начале каждой недели? - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь выполнить запрос, который возвращает уровень запаса в начале каждой календарной недели.Более конкретно, я хочу найти последнее событие перед началом каждой календарной недели.

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

И в начале каждой недели я хочу возвращать строку, непосредственно предшествующую ей.

Например, для каждой недели до16 ноября я хочу, чтобы он возвратил событие в сентябре, но все недели после 16 ноября я хочу получить событие от 16-го.

Я с радостью сообщу дату начала, но для моего приложенияЯ не могу изменить запрос еженедельно.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

посмотрите, работает ли он:

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
0 голосов
/ 04 декабря 2018

Вот один из способов сделать это.

В исходном запросе вы выбрали бы разбиение по записям date_trunc (week, timestamp) с последующим упорядочением поля 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
...