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

Откуда:
Сообщений: 64
Добрый день всем!)
Подскажите каким образом можно решить эту задачу.
Есть данные на SQL Server Express Edition:

Users_ID NameEnt Date_Time
85 Вход 2014-04-01 09:39:17.000
85 Выход 2014-04-01 10:35:02.000
85 Вход 2014-04-01 10:41:35.000
85 Выход 2014-04-01 11:42:37.000
85 Вход 2014-04-01 12:07:10.000
85 Выход 2014-04-01 13:06:04.000
85 Выход 2014-04-01 13:11:27.000
85 Вход 2014-04-01 13:22:58.000
85 Вход 2014-04-01 13:24:57.000
85 Выход 2014-04-01 14:01:39.000

Нужно чтобы была последовательность, после Входа- Выход, после Выхода-Вход.
При чем если после входа есть несколько выходов до следующего входа, то нужно взять max выход.
Если после выхода есть несколько входов до следующего выхода, то нужно взять min вход.

Заранее спасибо.
28 май 14, 11:41    [16084272]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность вывода данных  [new]
FRoST86
Member

Откуда:
Сообщений: 121
Katerinka111,

Sql server то какой, скажите?

with t1 as
(	select 85 as Users_Id, 'Вход' as NameEnt, cast('2014-04-01 09:39:17.000' as datetime) as Date_Time union all
	select 85 as Users_Id, 'Выход' as NameEnt, cast('2014-04-01 10:35:02.000' as datetime) as Date_Time union all
	select 85 as Users_Id, 'Вход' as NameEnt, cast('2014-04-01 10:41:35.000' as datetime) as Date_Time union all
	select 85 as Users_Id, 'Выход' as NameEnt, cast('2014-04-01 11:42:37.000' as datetime) as Date_Time union all
	select 85 as Users_Id, 'Вход' as NameEnt, cast('2014-04-01 12:07:10.000' as datetime) as Date_Time union all
	select 85 as Users_Id, 'Выход' as NameEnt, cast('2014-04-01 13:06:04.000' as datetime) as Date_Time union all
	select 85 as Users_Id, 'Выход' as NameEnt, cast('2014-04-01 13:11:27.000' as datetime) as Date_Time union all
	select 85 as Users_Id, 'Вход' as NameEnt, cast('2014-04-01 13:22:58.000' as datetime) as Date_Time union all
	select 85 as Users_Id, 'Вход' as NameEnt, cast('2014-04-01 13:24:57.000' as datetime) as Date_Time union all
	select 85 as Users_Id, 'Выход' as NameEnt, cast('2014-04-01 14:01:39.000' as datetime) as Date_Time)
28 май 14, 12:27    [16084573]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность вывода данных  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
select
 *
from
 Таблица t
where
 not exists(select 1 from (select top (1) NameEnt from #t where Date_Time < t.Date_Time order by Date_Time desc) x where t.NameEnt = x.NameEnt and t.NameEnt = 'Вход') and
 not exists(select 1 from (select top (1) NameEnt from #t where Date_Time > t.Date_Time order by Date_Time) x where t.NameEnt = x.NameEnt and t.NameEnt = 'Выход')
order by
 Date_Time;
28 май 14, 12:43    [16084667]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность вывода данных  [new]
Katerinka111
Member

Откуда:
Сообщений: 64
FRoST86,
2008.
28 май 14, 13:59    [16085318]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность вывода данных  [new]
Katerinka111
Member

Откуда:
Сообщений: 64
invm,
Огромное спасибо, все получилось))
28 май 14, 15:11    [16085928]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность вывода данных  [new]
Katerinka111
Member

Откуда:
Сообщений: 64
invm,
Только не совсем понятно почему выбирается Select 1 from(подзапрос понятен).
А вот почему Select 1 не очень...
Не могли Вы пояснить этот момент?
28 май 14, 15:21    [16086027]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность вывода данных  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Katerinka111
А вот почему Select 1 не очень...
Не могли Вы пояснить этот момент?
Select-лист запроса, находящегося в exists, может содержать любой, синтаксически верный, перечень существующих столбцов и выражений. Потому что этот запрос никаких данных не возвращает. Может вместо 1 написать * или 1/0, на результат это не повлияет.
28 май 14, 15:48    [16086281]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность вывода данных  [new]
Katerinka111
Member

Откуда:
Сообщений: 64
invm,
Спасибо, действительно, если что то есть в рез-ем наборе, то TRUE :)
28 май 14, 17:53    [16087254]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить