Таблица :
create table dttest
(
names varchar(20),
coldate datetime
);
Записи :
insert into dttest values('A','2019-10-31');
insert into dttest values('A','2019-10-30');
insert into dttest values('A','2019-10-29');
insert into dttest values('B','2019-10-14');
insert into dttest values('B','2019-10-22');
Запрос : я пытаюсь получитьтолько те записи, которые присутствуют в определенные даты и не присутствуют в некоторые даты .
Попробуйте 1:
SELECT *
FROM dttest
WHERE (CONVERT(VARCHAR(10),CAST(coldate as DATE),105) NOT IN ('31-10-2019','22-10-2019')) AND
(CONVERT(VARCHAR(10),CAST(coldate as DATE),105) IN ('14-10-2019'))
Вывод:
names coldate
------------------------------
B 2019-10-14 00:00:00.000
B
не должно приходить, поскольку оно также присутствует в 22-10-2019
, ожидаемый результат равен NULL.
Попробуйте 2:
SELECT *
FROM dttest t
WHERE NOT EXISTS
(
SELECT 1
FROM dttest t1
WHERE t.names = t1.names
AND (CONVERT(VARCHAR(10),CAST(t1.coldate as DATE),105) NOT IN ('31-10-2019','30-10-2019'))
) AND
EXISTS
(
SELECT 1 FROM dttest t2
WHERE t.names = t2.names
AND (CONVERT(VARCHAR(10),CAST(t2.coldate as DATE),105) IN ('14-10-2019'))
)
Нет результата, но ожидаемый результат равен B
.