Я пытаюсь разработать запрос для проверки ввода данных пользователя, и я застрял. В основном, мы работаем с информацией о ежедневном 24-часовом смешанном образце воды. Пользователь вводит «COLDATE», который является концом составного файла и сохраняется в формате DATETIME, например «2015-03-02 04: 00: 00.000». Затем они войдут в «Compstartdate», который является varchar (8), и выглядит как «03/02/15». Наконец, они войдут в «Compstarttime», который является varchar (5) и выглядит «04:01».Проверка правильности ввода данных SQL-запрос
Не обвиняйте меня, я не установил его таким образом, и предположим, что фиксация типов данных не является вариантом.
Правило, с которым я имею дело, заключается в том, что «Compstart (дата/время)» на один день должен соответствовать «COLDATE» за предыдущий день. До сих пор я могу только выяснить, как узнать, соответствует ли «COLDATE (день) - 1 день» «Compstartdate (день)». Другими словами, я могу легко выполнять логические сравнения в одной записи, но я не знаю, как сравнивать две записи.
Кроме того, мы говорим только о 2000 записях, поэтому соображения производительности не важны, о чем свидетельствует мое использование оператора case. Под этим я подразумеваю, что решение, которое включает курсор или while-loop, было бы совершенно приемлемо для меня.
Вот что я до сих пор:
SELECT S.[SAMPNO]
,S.[LOCCODE]
,S.[COLDATE]
,U.[Compstartdate]
,U.[Compstarttime]
FROM [dbo].[SAMPLE] as S
JOIN [dbo].[SUSERFLDS] as U
on S.SAMPNO = U.SAMPNO
Where
Case
When DATEPART(DAY, Convert(VARCHAR(10),U.Compstartdate,101)) !=
DATEPART(DAY, DATEADD(DAY, -1, S.COLDATE))
Then 'Yes'
ELSE 'NO'
END ='YES'
Edit: Позвольте мне объяснить проблему лучше. Если я собираю 24-часовой составной образец сегодня и вводя информацию о семпла в базу данных, я собираюсь ввести дату/время, когда я собрал образец (конец композитного), и дату/время начала композита , Поскольку это 24-часовая композиция, дата/время начала сегодняшней выборки должны совпадать с временем окончания (COLDATE) вчерашнего образца. Поэтому мне нужно взять два образца с одним и тем же LOCCODE, но с COLDATE на один день. Затем посмотрите, совпадает ли COLDATE для более раннего образца с Compstartdate/time более позднего образца.
Редактировать # 2: Вот несколько примеров данных.
create table [SAMPLE] (
SAMPNO int,
LOCCODE char(7),
COLDATE datetime
);
create table SUSERFLDS (
SAMPNO int,
Compstartdate char(8),
Compstarttime char(5)
);
SET DATEFORMAT mdy;
insert into [SAMPLE] values (11,'Sample1','2015-03-02 04:00:00.000');
insert into [SAMPLE] values (12,'Sample1','2015-03-03 04:00:00.000');
insert into [SAMPLE] values (13,'Sample1','2015-03-04 04:00:00.000');
insert into [SAMPLE] values (14,'Sample1','2015-03-05 04:00:00.000');
insert into SUSERFLDS values (11, '03/01/15', '04:00');
insert into SUSERFLDS values (12, '03/02/15', '04:00');
insert into SUSERFLDS values (13, '03/03/15', '05:00');
insert into SUSERFLDS values (14, '03/04/15', '04:00');
--Compstartdate/time for SAMPNO 12
--does match COLDATE for SAMPNO 11
--Compstartdate/time for SAMPNO 13
--should match COLDATE for SAMPNO 12
_ «Я могу легко делать логические сравнения в одной записи, но я понятия не имею, как сравнивать две записи». Вы имеете в виду, что можете сравнить день, но нужно также сравнить время? – Turophile
Хотя верно, что мне нужно сравнить элементы даты и времени, это не то, что я имел в виду под «сравнением двух записей». Я имел в виду, что я не знаю, как сравнивать данные с одного дня с данными предыдущего дня, которые будут отображаться как отдельная запись/строка в объединенной таблице. –
Я предполагаю, что это SQL Server. Какая версия? – cha