Как найти столбец с нулевыми и ненулевыми значениями в той же таблице - PullRequest
0 голосов
/ 18 сентября 2019

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

Первый запрос:

select * from test where Account Number is Not Null and LastChangedDate is Null  

Но этот запрос возвращает записи с нулевыми значениями, а не выводит записи со значениями для столбца LastChangedDate

Пожалуйста, помогите.Ниже приведен пример записи

AccountNumber EffectiveDate LastChangedDate 
1234567     2019-05-31          2018-09-14
1234567     2019-06-30          2018-09-14
1234567     2019-07-31           NULL

Второй запрос:

select * from test where Account Number is Not Null and 'LastChangedDate' is Null  

Но этот запрос возвращает записи с нулевыми значениями, а не выводит записи со значениями для столбца «LastChangedDate»

Ожидается: возможность извлечь все записи для одного столбца со значениями Null и Not Null и пропустить записи со всеми заполненными значениями

Ответы [ 2 ]

1 голос
/ 18 сентября 2019

Использование LEAD():

SELECT *
FROM (
    SELECT 
        t.*, 
        LEAD(LastChangedDate) OVER(PARTITION BY AccountNumber ORDER BY EffectiveDate) LastChangedDateLead
    FROM test t
) x
WHERE LastChangedDate IS NULL OR LastChangedDateLead IS NULL

Это даст вам записи, где LastChangedDate равно NULL или для которых следующая запись (для того же клиента и по заказу EffectiveDate) имеетNULL значение как LastChangedDate.

Примечание: последняя запись о каждом клиенте будет отображаться в результате: поскольку следующей записи нет, запрос будет считать, что его LastChangedDate равно NULL тоже.

Эта демонстрация на скрипте БД с вашими примерами возвращает:

AccountNumber | EffectiveDate       | LastChangedDate     | LastChangedDateLead
------------: | :------------------ | :------------------ | :------------------
      1234567 | 30/06/2019 00:00:00 | 14/09/2018 00:00:00 | <em>null</em>               
      1234567 | 31/07/2019 00:00:00 | <em>null</em>                | <em>null</em>               
0 голосов
/ 18 сентября 2019

Просто сделайте это вместе:

SELECT *
FROM test
WHERE (Account Number is Not Null and 'LastChangedDate' is Null)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...