Как создать представление в PostgreSQL с предложением where - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь создать представление в Postgres

  1. У меня 3-4 метки времени в каждой дате закрытия, где мне нужно выбирать только самую последнюю метку времени каждого дня
  2. А также я должен ограничить дату закрытия только 30 днями (показано в SQL запросе ниже)

Ниже приведен запрос из SQL данных, которые я создал

CREATE VIEW dbo.CashBreaks_30Days_View as
SELECT Closing_date,Bo,Desk,Breaks_Staus,Owner,status,Team,
SLA,Age_Bucket_EntryDate,Age_Bucket_ValueDate,Age_EntryDate,Age_ValueDate,
[Type_(2)]
FROM Master_Data_CashBreaks
WHERE Closing_date >= cast(getdate()-37 as date);

Ответы [ 4 ]

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

Я могу создать с помощью ниже

создать или заменить представление cashbreaks_30days_view_latesttime как выберите a. Детали столбца

из master_data a где a. Closing_date> = NOW () - интервал «40 дней» и a.closing_date = (выберите max (b.closing_date)
из master_data b
где date (b.closing_date) = date (a.closing_date));

0 голосов
/ 13 апреля 2020

В вашем коде есть несколько ошибок:

  1. [Type_(2)] - недействительно SQL
  2. getdate() - в Oracle такая функция недоступна , вместо этого следует использовать trunc(SYSDATE).
  3. getdate()-37 - Почему -37, если вам нужны данные за последние 30 дней. Это должно быть 30.

Ваш запрос должен выглядеть следующим образом: oracle:

CREATE VIEW dbo.CashBreaks_30Days_View as
SELECT * FROM
  (SELECT Closing_date,Bo,Desk,Breaks_Staus,Owner,status,Team,
          SLA,Age_Bucket_EntryDate,Age_Bucket_ValueDate,Age_EntryDate,Age_ValueDate,
          ROW_NUMBER() OVER (PARTITION BY Closing_date ORDER BY Closing_date DESC) AS RN
     FROM Master_Data_CashBreaks
    WHERE Closing_date >= TRUNC(SYSDATE) - 30)
WHERE RN = 1;
0 голосов
/ 14 апреля 2020

Ваш SQL содержит много ошибок

  1. квадратные скобки недопустимы в SQL идентификаторах, если у вас есть такой столбец, вам нужно использовать двойные кавычки. Мне неясно, называется ли ваш столбец "[Type_(2)]" или, может быть, просто `" Type_ (2) "
  2. Нет getdate () в SQL или в Postgres. Используйте current_date вместо

Итак, исправляя все эти ошибки, ваше утверждение должно выглядеть так:

CREATE VIEW dbo.CashBreaks_30Days_View 
as
SELECT Closing_date, Bo, Desk, Breaks_Staus, Owner, status,
       Team, SLA, Age_Bucket_EntryDate, 
       Age_Bucket_ValueDate, Age_EntryDate, Age_ValueDate,
       "[Type_(2)]" -- or maybe only "Type_(2)"
FROM Master_Data_CashBreaks
WHERE Closing_date >= current_cate - 30;
0 голосов
/ 13 апреля 2020

Если я вас правильно понял, что-то вроде этого может вернуть желаемый результат:

create or replace view cash_breaks_30days_view
as
select a.list_of_columns
from master_data_cashbreaks a
where a.closing_date >= trunc(sysdate) - 30             --> the last 30 days
  and a.closing_date = (select max(b.closing_date)      --> subquery is used to return
                        from master_data_cashbreaks b   --  the last timestamp per date
                        where b.id = a.id
                          and trunc(b.closing_date) = trunc(a.closing_date)
                       )
...