Запрос, возвращающий значение NULL для столбцов - PullRequest
0 голосов
/ 25 апреля 2019

Я очень новичок в использовании подзапросов. При выполнении следующего запроса столбцы t_num и timestamp имеют значение NULL, тогда как в соответствующей таблице эти столбцы имеют значения.

Таблица trans содержит несколько значений p_num, trans_amt, trans_balance. Я просто хочу получить сделку, которая произошла до 31 июля 2017 года и раньше.

select 
    p.p_number, 
    p.name, 
    t.t_num, 
    t.timestamp 
from payers p
    left join (
        select p_number, t_num, timestamp from trans a
        where a.timestamp <= '31-JUL-2017' and rownum = 1 
        order by a.timestamp desc
    ) t on t.p_number = p.p_number
where p.p_number in(44545558, 44545559, 44545560, 44545561, 44545562)

Результат

Result

Я попытался просто выполнить эту часть запроса, и я вижу значения столбцов t_num и timestamp.

select p_number, t_num, timestamp from trans a
where a.timestamp <= '31-JUL-2017' and rownum = 1 
order by a.timestamp desc

1 Ответ

4 голосов
/ 25 апреля 2019

Ваш запрос сначала упорядочивает данные в подзапросе и занимает первое, что не соответствует p_number. Лучше и безопаснее использовать row_number в таких запросах:

select p.p_number, p.name, t.t_num, t.timestamp
  from payers p
  left join (select p_number, t_num, timestamp,
                    row_number() over (partition by p_number order by timestamp desc) rn 
               from trans t 
               where t.timestamp <= date '2017-07-31') t
         on p.p_number = t.p_number and rn = 1
  where p.p_number between 44545558 and 44545562

Пример dbfiddle

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