Я хочу вывод текущей даты для моей процедуры - PullRequest
0 голосов
/ 06 октября 2018

Моя хранимая процедура выглядит следующим образом:

WITH dates
AS
  (SELECT (dt + level - 1) AS etadate
  FROM
    (SELECT TRUNC(DATE '2018-09-01', 'MM') - 1 AS dt FROM DUAL
    ) d
    CONNECT BY LEVEL <= sysdate - dt + 1
  )
SELECT TO_CHAR(TO_DATE(d.etadate,'DD-MM-YYYY HH24:MI:SS'),'DD-MM-YY')           AS DATEFORM,
  COALESCE(nsp.YNAME, LAG(nsp.YNAME IGNORE NULLS) OVER (ORDER BY d.etadate))         AS YNAME,
  COALESCE(nsp.CATEGORY, LAG(nsp.CATEGORY IGNORE NULLS) OVER (ORDER BY d.etadate))           AS CATEGORY,
  COALESCE(nsp.TYPE, LAG(nsp.TYPE IGNORE NULLS) OVER (ORDER BY d.etadate)) AS TYPE,
  COALESCE(nsp.STOCK_BALANCE, LAG(nsp.STOCK_BALANCE IGNORE NULLS) OVER (ORDER BY d.etadate)) AS STOCK_BALANCE
FROM dates d
LEFT JOIN VW_NET_STOCK_POSITION nsp 
 ON d.etadate = TRUNC(nsp.LAST_UPD_IS)

и это вывод:

OUTPUT

Теперь я хочувывод только на сегодняшнюю дату.Выходные данные должны быть последней записью этих выходных данных, поскольку сегодняшняя дата - 6 октября 2018 года.

1 Ответ

0 голосов
/ 06 октября 2018

необходимо повторить предыдущую транзакцию вместо нуля

Самый простой способ сделать это - взять исходный запрос и обернуть его в фильтрующий запрос:

select * from (
    WITH dates
    AS
      (SELECT (dt + level - 1) AS etadate
      FROM
        (SELECT TRUNC(DATE '2018-09-01', 'MM') - 1 AS dt FROM DUAL
        ) d
        CONNECT BY LEVEL <= sysdate - dt + 1
      )
    SELECT TO_CHAR(TO_DATE(d.etadate,'DD-MM-YYYY HH24:MI:SS'),'DD-MM-YY')           AS DATEFORM,
      COALESCE(nsp.YNAME, LAG(nsp.YNAME IGNORE NULLS) OVER (ORDER BY d.etadate))         AS YNAME,
      COALESCE(nsp.CATEGORY, LAG(nsp.CATEGORY IGNORE NULLS) OVER (ORDER BY d.etadate))           AS CATEGORY,
      COALESCE(nsp.TYPE, LAG(nsp.TYPE IGNORE NULLS) OVER (ORDER BY d.etadate)) AS TYPE,
      COALESCE(nsp.STOCK_BALANCE, LAG(nsp.STOCK_BALANCE IGNORE NULLS) OVER (ORDER BY d.etadate)) AS STOCK_BALANCE
    FROM dates d
    LEFT JOIN VW_NET_STOCK_POSITION nsp 
     ON d.etadate = TRUNC(nsp.LAST_UPD_IS)
)
where etadate = trunc(sysdate)
/

Производительность этого может быть не очень хорошей в реальной жизни, в зависимости от того, сколько данных у вас в базовых таблицах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...