SQL Server 2008: запрос для поиска сегодняшней даты в перекрывающиеся даты

введите описание изображения здесь

У меня есть таблица выше, где мне нужно, чтобы NoteIndx соответствовал сегодняшней дате. Только для тестирования, предположим, что сегодня 2013/06/02 (июнь 2,2013), и это даст мне две записи с noteindx 93105 и 104044.

Но правильное значение здесь - 104044, так как мне нужно выбрать тот, который имеет самые короткие даты STRTDATE и ENDDATE.

Я пытаюсь с различными запросами sql, но пока не получаю правильный результат.

Может ли кто-нибудь помочь мне с наилучшим возможным запросом, чтобы получить результаты выше?

Благодарю.

1 ответ

Решение

Это то, что вы хотите?

select top 1 n.*
from notes n
where cast('2013-06-02' as date) >= strtdate and
      cast('2013-06-02' as date) < enddate + 1
order by enddate - strtdate;

Это не использовать between потому что ваши даты хранятся как datetime - это всегда дает возможность быть частью времени на дате.

Если вы хотите сегодняшнюю дату, то используйте getdate() вместо cast('2013-06-02' as date),

Другие вопросы по тегам