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

Откуда:
Сообщений: 122
Имеется табличка tur(фио,дата,время,проход) поле проход может быть(вход/выход)
надо получить таблицу turnew(фио,дата,самое раннее время входа,самое позднее время выхода)
p.s. входов выходов у одного человека за день может быть много.
27 окт 09, 13:54    [7844388]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36829
И что кроме четрыех полей должно еще быть в табличке turnew?
27 окт 09, 13:57    [7844422]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом.  [new]
Anddros
Member

Откуда:
Сообщений: 1077
как-то так:
select [фио],[дата],min(case when [проход] = 'вход' then [время] end) ,max(case when [проход] = 'выход' then [время] end) 
from tur
group by [фио],[дата]
27 окт 09, 14:00    [7844454]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом.  [new]
sdepals
Member

Откуда:
Сообщений: 122
нужны только эти 4 поля,
т.е. у меня есть список событий, что в такое то время люди прошли через турникет,
а мне надо получить время входа и время выхода конкретного человека
остальные записи можно выкинуть...
т.е. есть идея(но мне не нравится), сделать две таблицы, одна входы другая выходы, потом найти минимальное время(конкретной даты) для входа и максимальное время, для выхода ,
и потом объединить.
НО: 1) нехочется создавать две таблички. 2) как найти мин/макс дату?
27 окт 09, 14:06    [7844500]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом.  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
типа того
DECLARE @T table 
(
 ID int
 ,[Date] Datetime
 ,Direction bit
)

insert @T (ID,[Date],Direction) values (1,'20091001 9:00',0 )
insert @T (ID,[Date],Direction) values (1,'20091001 12:00',1 )
insert @T (ID,[Date],Direction) values (1,'20091001 18:00',1 )
insert @T (ID,[Date],Direction) values (2,'20091001 9:00',0 )




SELECT 
 ID
 ,( SELECT MIN([Date]) FROM @T  T1 WHERE DATEADD(DAY,DATEDIFF(day,0,T.[Date]),0) = DATEADD(DAY,DATEDIFF(day,0,T1.[Date]),0) AND T1.ID = T.ID AND T1.Direction = 0) [In]
 ,( SELECT MAX([Date]) FROM @T  T1 WHERE DATEADD(DAY,DATEDIFF(day,0,T.[Date]),0) = DATEADD(DAY,DATEDIFF(day,0,T1.[Date]),0) AND T1.ID = T.ID AND T1.Direction = 1) [Out]
 
FROM @T T
GROUP BY ID,DATEADD(DAY,DATEDIFF(day,0,[Date]) ,0)
27 окт 09, 14:12    [7844544]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом.  [new]
sdepals
Member

Откуда:
Сообщений: 122
Вариант Anddros мне больше понравился.
хм.. чёт не думал что мин/макс для даты прокатят.
имена полей фио,дата,время,проход - ПО РУССКИ.
запрос Anddros ругается на недопустимые имена полей, и с квадратными скобками и без них.
поменять чтоли на англисские названия?
27 окт 09, 14:19    [7844598]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом.  [new]
sdepals
Member

Откуда:
Сообщений: 122
Всё, огромное спасибо! тема закрыта.
помог запрос Anddros
27 окт 09, 14:26    [7844656]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом.  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
sdepals
Вариант Anddros мне больше понравился.
хм.. чёт не думал что мин/макс для даты прокатят.
имена полей фио,дата,время,проход - ПО РУССКИ.
запрос Anddros ругается на недопустимые имена полей, и с квадратными скобками и без них.
поменять чтоли на англисские названия?
Где сообщение об ошибке-то?
Наверно, появляется предупреждение, что значения NULL не были посчитаны агрегатной функцией.
27 окт 09, 14:27    [7844668]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом.  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
да не закрыта , у Anddros - хм, решение для 2008 . в предыдущих версиях типа time не было.

дата,время - строковые ?
27 окт 09, 14:29    [7844683]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом.  [new]
sdepals
Member

Откуда:
Сообщений: 122
1.Нет, это моя ошибка :), не для той таблицы запрос сделал(а там поля не так назывались и каких то не было) на значения null не ругается.
2. У меня MS SQL Server 2005 express
дата и время импортирую из линкед сервера эксель файла получаю как строковую, потом конверт в дататайм, а потом решил что для этого запроса понадобится их разделить на дату и время.
27 окт 09, 14:36    [7844716]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом.  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Ken@t
да не закрыта , у Anddros - хм, решение для 2008 . в предыдущих версиях типа time не было.

дата,время - строковые ?
А где у Anddros вообще упоминаются типы?
27 окт 09, 14:38    [7844728]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом.  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
sdepals

2. У меня MS SQL Server 2005 express
дата и время импортирую из линкед сервера эксель файла получаю как строковую, потом конверт в дататайм, а потом решил что для этого запроса понадобится их разделить на дату и время.

хи-хи, и как это получилось отдельно тайм от даты ))))).

впрочем, это ваш сосбственый выбор личной грабли.
27 окт 09, 14:38    [7844729]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом.  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
iap
Ken@t
да не закрыта , у Anddros - хм, решение для 2008 . в предыдущих версиях типа time не было.

дата,время - строковые ?
А где у Anddros вообще упоминаются типы?

я в хрустальный шар смотрел
27 окт 09, 14:39    [7844735]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом.  [new]
sdepals
Member

Откуда:
Сообщений: 122
угумс, про типы данных у андроса я тож ничо не нашёл.

автор
отдельно тайм от даты

ну а это мои личные грабли :)
вначале select convert(nvarchar(10),дата,4),convert(nvarchar(10),дата,8) from ....
потом обратно конверт в дататайм :)
ну вот так вот.
27 окт 09, 14:53    [7844812]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить