я следующую таблицу с тремя полями, как показано ниже:Выбрать строки из таблицы, где значение в столбце появляется те
Таблица: Testing
create table testing
(
colnum varchar(10),
coldate date,
colid int
);
Вставка: создание
insert into testing values('111','2015-01-01',1);
insert into testing values('111','2015-01-02',1);
insert into testing values('111','2015-01-03',1);
insert into testing values('111','2015-01-04',1);
insert into testing values('111','2015-01-05',1);
insert into testing values('222','2015-01-01',1);
insert into testing values('333','2015-01-01',1);
Index :
create clustered index id_idx on testing(colid);
create nonclustered index date_nidx on testing(coldate);
create nonclustered index num_nidx on testing(colnum);
Примечание: Теперь я хочу показать записи, которые являются только в конкретной даты и конкретного идентификатора, а не другой даты.
Например: Я хочу показать записи, которые являются ТОЛЬКО В указанной дате и ID, но не в других датах.
Учитывая Дата: 2015-01-01
Учитывая ID: 1
Для которого я написал следующий запрос:
select * from testing
where coldate in ('2015-01-01')
and coldid = 1
and colnum not in(select colnum from testing where coldid = 1 and
coldate in('2015-01-02','2015-01-03','2015-01-04'
'2015-01-05');
Результат:
colnum coldate colid
--------------------------
222 2015-01-01 1
333 2015-01-01 1
Explaination: Запрос показывает два поскольку обе записи имеют только конкретная дата и идентификатор Но запись 111
не показана, потому что это также относится к другим датам, как вы можете видеть в приведенной выше таблице.
Вышеуказанный запрос работает отлично для меня Но занимает больше времени для выполнения за миллиарды записей.
в соответствии с вашими условиями, '111 'также должны быть возвращены? –
Есть ли какой-нибудь индекс в вашей таблице? –
Просим опубликовать сценарий создания индекса. –