Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Поиск даты  [new]
Fextok
Member

Откуда: Озеры
Сообщений: 23
Уважаемые разработчики! всем добрый день!

Есть такая задача:

Имеется таблица со следующей структуртой:
Картинка с другого сайта.


В колонке NUM идет номер строки, BEG_WEEK и END_WEEK - задают неделю, далее идут месяца (первая строка), к которым вниз пребавляется по 7 дней.

Из каждой колонки нужно выбрать дату, максимально близкую к сегодняшней. Т.е. таблица будет большой, на много месяцев вперед и при запуске нужно из каждой колонки выбирать такую дату и сформировать из них одну таблицу.


Какие здесь возможны варианты решений?
24 мар 13, 18:07    [14089369]     Ответить | Цитировать Сообщить модератору
 Re: Поиск даты  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
select (select top 1 MONTH1 from mytable order by abs(datediff(day, getdate(), MONTH1))),
       (select top 1 MONTH2 from mytable order by abs(datediff(day, getdate(), MONTH2))),
...
PS не проверял!
24 мар 13, 18:21    [14089403]     Ответить | Цитировать Сообщить модератору
 Re: Поиск даты  [new]
aleks2
Guest
Паганель
select (select top 1 MONTH1 from mytable order by abs(datediff(day, getdate(), MONTH1))),
       (select top 1 MONTH2 from mytable order by abs(datediff(day, getdate(), MONTH2))),
...
PS не проверял!


Апять плохому учим?
Чо це за фуфло? Индексы отдыхают...
select top 1 MONTH1 from mytable order by abs(datediff(day, getdate(), MONTH1))


select top 1 MONTH1 
from 
(select min(MONTH1) MONTH1 from mytable  where MONTH1 > getdate()
 union all
 select max(MONTH1) MONTH1 from mytable  where MONTH1 < getdate()
) X
order by abs(datediff(day, getdate(), MONTH1)))
25 мар 13, 07:55    [14090372]     Ответить | Цитировать Сообщить модератору
 Re: Поиск даты  [new]
Fextok
Member

Откуда: Озеры
Сообщений: 23
aleks2
Паганель
select (select top 1 MONTH1 from mytable order by abs(datediff(day, getdate(), MONTH1))),
       (select top 1 MONTH2 from mytable order by abs(datediff(day, getdate(), MONTH2))),
...
PS не проверял!


Апять плохому учим?
Чо це за фуфло? Индексы отдыхают...
select top 1 MONTH1 from mytable order by abs(datediff(day, getdate(), MONTH1))


select top 1 MONTH1 
from 
(select min(MONTH1) MONTH1 from mytable  where MONTH1 > getdate()
 union all
 select max(MONTH1) MONTH1 from mytable  where MONTH1 < getdate()
) X
order by abs(datediff(day, getdate(), MONTH1)))


Спасибо!

И таких написать 100 штук, если будет столько месяцев??
31 мар 13, 22:22    [14119340]     Ответить | Цитировать Сообщить модератору
 Re: Поиск даты  [new]
aleks2
Guest
Fextok
И таких написать 100 штук, если будет столько месяцев??


Ну... пойди и набей морду проектировщику базы?
1 апр 13, 07:05    [14119645]     Ответить | Цитировать Сообщить модератору
 Re: Поиск даты  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
Fextok
И таких написать 100 штук, если будет столько месяцев??
Ну, можно через UNPIVOT переделать...
А вообще +1:
aleks2
Ну... пойди и набей морду проектировщику базы?
1 апр 13, 09:42    [14119870]     Ответить | Цитировать Сообщить модератору
 Re: Поиск даты  [new]
Fextok
Member

Откуда: Озеры
Сообщений: 23
aleks2
Fextok
И таких написать 100 штук, если будет столько месяцев??


Ну... пойди и набей морду проектировщику базы?


Есть альтернатива? :)
11 апр 13, 12:47    [14166603]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить