Как вернуть только идентификаторы, которые не содержат дату

Как мне вернуть только идентификаторы, у которых нет связанной даты? пример:

id    date 
1      1/2/2023
1      null
1      null
2      null
2      null
3      null
3      null
4      3/5/2024
4      6/4/2024
4      null

В этом примере я бы вернул только идентификаторы 2 и 3, поскольку с ними вообще не связана никакая дата.

SQL-код, который я пробовал, приведен ниже, однако он не возвращает правильную информацию, а возвращает идентификатор, который имеет как нули, так и дату.

SELECT distinct
    f.[ID],
    f.[CID],
    f.[FirstName],
    f.[LastName],
    f.[FA],
    f.[Active],
    f.[Username],
    s.LastEval
    

    into #tempF
    FROM  f
    inner join  s
    on s.ID = f.ID
    inner join  ss
    on ss.ID = s.ID

    where  FirstName is not null 
    and 
    LastName NOT LIKE '%[^a-zA-Z ]%'
    and LastName is not null
    and FA = @fa
    and f.Active = @active
    and ss.T = @t
    
    order by LastName, FirstName



    select Count(CID), 
           ID,
            CID,
            FirstName,
            LastName,
            LastEval
    from #tempF
    where LastEval is  null
    group by 
     ID,
            CID,
            FirstName,
            LastName,
            LastEval

            order by LastName, FirstName
    drop table #tempF

Запрос не соответствует приведенному вами примеру, однако вы можете запросить его с помощью [table].date IS NOT NULL

Mahdi Zarei 10.07.2024 14:43

Попробуйте использовать NOT EXISTS

NickW 10.07.2024 14:48

Данные вашего образца совершенно не соответствуют вашему запросу. Это проблема с двумя столбцами или вам нужно несколько столбцов? Предоставьте полный и последовательный минимально воспроизводимый пример.

jarlh 10.07.2024 15:20

@jarlh Ваш запрос кажется правильным, если ОП нужны только идентификаторы.

The Impaler 10.07.2024 15:30

@ghostfly Каков ожидаемый результат?

The Impaler 10.07.2024 15:30

@TheImpaler, я знаю, но, вероятно, необходим другой подход, поскольку OP, похоже, имеет в виду больше столбцов.

jarlh 10.07.2024 15:33

Институт Гьян ниже ответил на вопрос, чтобы дать мне то, что я ищу - я добавил другие поля в моем приведенном выше запросе к его, чтобы получить результаты. Спасибо всем

ghostfly 10.07.2024 16:05
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
7
69
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Попробуйте это только для идентификаторов, основанных с нулевой датой:

select id from(
select id,max(isnull(date,'1900-01-01')) from [user_table] group by id
) a where date='1900-01-01'

Сделайте GROUP BY. Используйте HAVING, чтобы вернуть только идентификаторы с 0 датами. (count(date) учитываются только ненулевые даты.)

select id
from tablename
group by id
having count(date) = 0

Если вы хотите, чтобы возвращалось больше столбцов, используйте оконную функцию count(), в которой вы подсчитываете ненулевые даты для каждого идентификатора. Верните строки, в которых этот счетчик равен 0.

select *
from
(
    select many columns ...,
           count(date) over (partition by id) cnt
    from your-complex-query
) dt
where dt.cnt = 0

если вы хотите получить только идентификатор, напишите запрос как простой

select Id from tablename where datecolumname is null

Другие вопросы по теме