Расширение / изменение моего запроса, чтобы найти больше записей, используя (потенциально) IFELSE - PullRequest
0 голосов
/ 30 апреля 2018

Мой вопрос будет использовать этот набор данных в качестве примера. У меня есть настройка запроса (я изменил переменные на более общие переменные, чтобы разместить их в Интернете, чтобы запрос мог не иметь смысла), который выбирает самую последнюю дату для данной учетной записи. Таким образом, запрос возвращает значения с типом reason_type, равным 1, с самой последней датой. Для этого запроса значение_даты_, установленное на , не равно нулю.

account date    effective_date  value   reason_type
123456  4/20/2017   5/1/2017    5       1
123456  1/20/2017   2/1/2017    10      1
987654  2/5/2018    3/1/2018    15      1
987654  12/31/2017  2/1/2018    20      1
456789  4/27/2018   5/1/2018    50      1
456789  1/24/2018   2/1/2018    60      1
456123  4/25/2017   null        15      2
789123  5/1/2017    null        16      2
666888  2/1/2018    null        31      2
333222  1/1/2018    null        20      2

Сейчас я хочу использовать эту логику, чтобы применять ее только к типу причины_1006 *.

  1. если для него есть запись, в противном случае по умолчанию используется значение reason_type

  2. Я думаю, что мне следует использовать IFELSE, но я не знаю, как мне поступить.

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

Надеюсь, мой вопрос понятен.

SELECT account, date, effective_date, value, reason_type
  from
  (
    SELECT account, date, effective_date, value, reason_type
      ROW_NUMBER() over (partition by account order by date desc) rn
      from mytable
      WHERE value is not null
      AND effective_date is not null
  ) 
WHERE rn =1

1 Ответ

0 голосов
/ 01 мая 2018

Я думаю, вы можете захотеть что-то вроде этого (кстати, у вас действительно есть столбец с именем date? Это кажется плохой идеей):

SELECT account, date, effective_date, value, reason_type
  FROM (
    SELECT account, date, effective_date, value, reason_type
        , ROW_NUMBER() OVER ( PARTITION BY account ORDER BY date DESC ) AS rn
      FROM mytable
     WHERE value IS NOT NULL
) WHERE rn = 1
    -- effective_date IS NULL or is on or before today's date
    AND ( effective_date IS NULL OR effective_date < TRUNC(SYSDATE+1) );

Надеюсь, это поможет.

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