Как мне вернуть только идентификаторы, у которых нет связанной даты? пример:
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
Попробуйте использовать NOT EXISTS
Данные вашего образца совершенно не соответствуют вашему запросу. Это проблема с двумя столбцами или вам нужно несколько столбцов? Предоставьте полный и последовательный минимально воспроизводимый пример.
@jarlh Ваш запрос кажется правильным, если ОП нужны только идентификаторы.
@ghostfly Каков ожидаемый результат?
@TheImpaler, я знаю, но, вероятно, необходим другой подход, поскольку OP, похоже, имеет в виду больше столбцов.
Институт Гьян ниже ответил на вопрос, чтобы дать мне то, что я ищу - я добавил другие поля в моем приведенном выше запросе к его, чтобы получить результаты. Спасибо всем
Попробуйте это только для идентификаторов, основанных с нулевой датой:
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
Запрос не соответствует приведенному вами примеру, однако вы можете запросить его с помощью
[table].date IS NOT NULL