Я пишу SQL-запрос в Teradata, чтобы определить, какие участники прошли тест eGFR и uACR с разницей в 4 дня. Все тесты подтягиваются корректно, но не уверен, к кому обратиться по этому поводу в предложении WHERE. Пример кода SQL
Мне нужны только возвращаемые данные, где это верно.
я пробовал это
AND [uACR_2b_2_DATE] <= ([uACR_2b_1_DATE] + 4 Days)
также другая попытка
Пожалуйста, прочитайте Пожалуйста, не загружайте изображения кода/данных/ошибок. и Почему я должен предоставлять минимально воспроизводимый пример для очень простого SQL-запроса?
Если это на самом деле ДАТА, все просто:AND uACR_2b_2_DATE <= uACR_2b_1_DATE + 4 Если это временная метка, вам нужен стандартный синтаксис интервала SQLAND uACR_2b_2_DATE <= uACR_2b_1_DATE + interval '4' day
О, это Teradata, и извините, я не знал, что не должен загружать изображение для кода.
@dnoeth ваше предложение сработало. Спасибо!


На сервере sql есть DATEDIFF для определения расстояния, это работает с днями, часами и т. д.
DECLARE
@dt1 DATETIME = '20230102 23:59:59'
,@dt2 DATETIME = '20230103 00:00:00'
SELECT difference_ABS = ABS( DATEDIFF(DAY, @dt1, @dt2) )
Это игнорирует часть времени и дает абсолютное (без отрицаний) расстояние части даты. Таким образом, в этом примере вы получаете расстояние в один день, хотя две временные метки разделены на одну минуту. Если это то, что Вы хотели бы использовать, просто поставьте WHERE-CLAUSE вот так
ABS( DATEDIFF(DAY, uACR_2b_1_DATE, uACR_2b_2_DATE) ) <= 4
Я попробовал это, но получил сообщение об ошибке, что чего-то не хватает между "(" и "ДЕНЬ"
Только что проверил еще раз (на сервере sql), и это сработало. Справку по Teradata можно найти по этой ссылке: docs.teradata.com/r/…
Синтаксис SQL Server сильно отличается от синтаксиса Teradata, выберите только один.