отображать записи за первый день из выбранного диапазона дат и конечную дату из выбранного диапазона дат. Диапазон дат может быть любой датой - PullRequest
0 голосов
/ 14 февраля 2020

Мне нужно показать открытые и закрытые запасы для диапазона вводимых пользователем дат.

Для открытого запаса он должен взять запас в первый день из выбранного диапазона дат и закрыть запас, который должен подвести запас в конечную дату с выбранный диапазон дат.

Допустим, у меня есть данные с 3 января по 30 января (в базе данных) и пользователь выбрал диапазон дат (с 1 января по 31 января. ) поэтому на открытом складе должно отображаться запас на 3 января. , а на закрытом складе должно отображаться запас на 30 января.

Как это сделать это в SAP HANA Studio?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

Следующий запрос может сделать то, что вы ищете:

SELECT 
 MAX(CASE WHEN S.dateStock = DT.minDate THEN S.dateStock END) AS openDate,
 MAX(CASE WHEN S.dateStock = DT.minDate THEN S.value END) AS openStock,
 MAX(CASE WHEN S.dateStock = DT.maxDate THEN S.dateStock END) AS closeDate,
 MAX(CASE WHEN S.dateStock = DT.maxDate THEN S.value END) AS closeStock
FROM
 stock S
JOIN(
 SELECT 
  min(dateStock) as minDate, 
  max(dateStock) as maxDate
 FROM stock 
 WHERE dateStock BETWEEN '2020-01-01' AND '2020-01-31'
) DT ON S.dateStock = DT.minDate OR S.dateStock = DT.maxDate

СМОТРИТЕ ДЕМО ЗДЕСЬ

0 голосов
/ 14 февраля 2020

делает предположение о том, как выглядят ваши исходные данные. Я попытался решить твою проблему.

with data as (
--here are some example data
select to_date('2019-12-31','yyyy-mm-dd') d ,-1 stock from dual union all
select to_date('2020-01-03','yyyy-mm-dd') d ,1 stock from dual union all
select to_date('2020-01-04','yyyy-mm-dd') d ,2 stock from dual union all
select to_date('2020-01-30','yyyy-mm-dd') d ,3 stock from dual union all
select to_date('2020-02-01','yyyy-mm-dd') d ,2 stock from dual 
)
,filt_data as (
select * from data
where d between to_date('2020-01-01','yyyy-mm-dd') and to_date('2020-01-31','yyyy-mm-dd')
)
, min_date as(
select min(d) d from filt_data
)
, max_date as(
select max(d) d from filt_data
)
select (select d from filt_data where d = (select d from min_date)) open_stock_date
      ,(select stock from filt_data where d = (select d from min_date)) open_stock
      ,(select d from filt_data where d = (select d from max_date)) close_stock_date
      ,(select stock from filt_data where d = (select d from max_date)) close_stock
from  dual ;
...