powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / СЛОЖНЫЙ ЗАПРОС!
9 сообщений из 9, страница 1 из 1
СЛОЖНЫЙ ЗАПРОС!
    #32060942
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ниужели никто не подскажет!!!

есть таблица

appointment [date]


запрос должен возвращать

appointment from_date till_date

как бы это по красивее написать??
Пока пришло в голову только:
select appointment, [date] as from_date from <table> where
[date] between
( select max( [date] ) from <table> where
[date] <= '1.9.2002' )
and
'30.9.2002'
Он возвращает занимаемые должности за указанный период
но вот как получить till_date
Мой вариант написать функцию, тогда будет >>>
select appointment, [date] as from_date, dbo. F( [date] ) as till_date
Но мне это решение не нравиться....
...
Рейтинг: 0 / 0
СЛОЖНЫЙ ЗАПРОС!
    #32060950
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ни фига не понял :(...
А по русски объяснить можно, что нужно-то?
...
Рейтинг: 0 / 0
СЛОЖНЫЙ ЗАПРОС!
    #32060951
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то вроде такого

select a.appointment, a.[date] AS from_date
max(b.[date] ) AS till_date
from <table> a
left outer join <table> b ON b.appointment = a.appointment AND b[date] < a.[date]
GROUP BY a.appointment, a.[date]
...
Рейтинг: 0 / 0
СЛОЖНЫЙ ЗАПРОС!
    #32060955
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такое не подайдет!
...
Рейтинг: 0 / 0
СЛОЖНЫЙ ЗАПРОС!
    #32060978
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Такое не подайдет!
От, теперь все ясно! Вот это точно по-русски!...
...
Рейтинг: 0 / 0
СЛОЖНЫЙ ЗАПРОС!
    #32060982
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если я правильно понял конечно....
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
set nocount on
declare @tbl table (a varchar( 20 ),d datetime)
insert into @tbl
select 'программер','20000101'
union all
select 'программер','20010101'
union all
select 'программер','20020101'
union all
select 'менеджер','20000101'
union all
select 'менеджер','20020101'

select a.*,isnull(cast(b.d as varchar( 12 )),'пашет') from @tbl a left join @tbl b on a.a=b.a and a.d<b.d
 
...
Рейтинг: 0 / 0
СЛОЖНЫЙ ЗАПРОС!
    #32061170
Vasiliy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Признаюсь, что сразу я тоже не понял вопрос.
Из исходной таблицы состоящей из полей
appointment
[date]

нужно сделать временную с полями

appointment
[date]
value_day - кол-во дней сколько appointment с [date]
действовал

а дальше дело техники
Получить все изменеия за период [a; b]

select appointment,
date As from_date,
DateAdd(day,value_day,date) As till_date
from <table>
where ((date < a) and (DateAdd(day,value_day,date)>a)) or
(date>a and date< b)
...
Рейтинг: 0 / 0
СЛОЖНЫЙ ЗАПРОС!
    #32061247
Vasiliy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
set nocount on
declare @a Datetime , @b datetime
set @a='2000/02/01'
set @b='2002/08/01'
declare @tbl table (a varchar(20),d datetime)
declare @tbl1 table (a varchar(20),d datetime, value_day int)
insert into @tbl
select 'программер','20000101'
union all
select 'программер','20010101'
union all
select 'программер','20020101'
union all
select 'менеджер','20000101'
union all
select 'менеджер','20020101'

insert into @tbl1
select g.a, g.d, min(g.t ) from
(select a.a, a.d, datediff(day,a.d,isnull(b.d,getdate())) As t from @tbl a left join @tbl b on a.a=b.a and a.d<b.d) As g
group by g.a, g.d

select * from @tbl1 order by a, d

select a, d As from_date, DateAdd(day,value_day,d) As till_date from @tbl1
where ((d < @a) and (DateAdd(day,value_day,d)>@a)) OR
(d>@a and d<@b)
order by a, d
...
Рейтинг: 0 / 0
СЛОЖНЫЙ ЗАПРОС!
    #32061277
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Vasiliy
Ну зачем же так сложно ?? Можно и одним запросом

Код: plaintext
1.
2.
3.
4.
select a.a, a.d AS from_date, ISNULL(min(b.[d]), GETDATE()) AS till_date 
from @tbl a 
left outer join @tbl b ON b.a = a.a AND b.[d] > a.[d] 
GROUP BY a.a, a.[d]
ORDER BY a.a, a.[d]
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / СЛОЖНЫЙ ЗАПРОС!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]