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

Откуда:
Сообщений: 24
MSSQL 2005.
нужна помощь: имею таблицу с полями vcEvent, dEventime типа datetime
Начало работы 22.04.2013 9:00:54
Конец работы 22.04.2013 16:40:12
Конец работы 22.04.2013 18:00:14
Начало работы 23.04.2013 10:56:11
Конец работы 23.04.2013 18:00:00

Требуется выбрать на каждое число месяца минимальное время начала работы и соответственно максимальное время окончания, т.е. избавиться от выделенной красным строки.
select MAX(dEventTime)
позволяет сгруппировать мне только дату, без времени. а мне нужно время обязательно.
25 апр 13, 17:01    [14231410]     Ответить | Цитировать Сообщить модератору
 Re: выбрать максимальное время события в нескольких днях за период  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2551
ilya80let,

на оптимальность не претендую, но идея, думаю, понятна
DECLARE @t TABLE (id INT IDENTITY(1,1), tp VARCHAR(128), dt DATETIME)

INSERT INTO @t
(
	tp,
	dt
)
SELECT 'Начало работы', '20130422 9:00:54' UNION ALL
SELECT 'Конец работы',  '20130422 16:40:12' UNION ALL
SELECT 'Конец работы',  '20130422 18:00:14' UNION ALL
SELECT 'Начало работы', '20130423 10:56:11' UNION ALL
SELECT 'Конец работы',  '20130423 18:00:00'

SELECT
   MIN(CASE WHEN t.tp = 'Начало работы' THEN dt ELSE NULL END) AS t1,
   MAX(CASE WHEN t.tp = 'Конец работы' THEN dt ELSE NULL END) AS t2
FROM @t t
GROUP BY CONVERT(VARCHAR(128), t.dt, 104)
25 апр 13, 17:10    [14231469]     Ответить | Цитировать Сообщить модератору
 Re: выбрать максимальное время события в нескольких днях за период  [new]
ilya80let
Member

Откуда:
Сообщений: 24
PaulYoung,
Спасибо, в эту сторону сам не додумался бы
25 апр 13, 17:16    [14231515]     Ответить | Цитировать Сообщить модератору
 Re: выбрать максимальное время события в нескольких днях за период  [new]
BlackRaider
Member

Откуда: Москва (Волгоград)
Сообщений: 63
DECLARE @t TABLE (id INT IDENTITY(1,1), tp VARCHAR(128), dt DATETIME)

INSERT INTO @t
(
	tp,
	dt
)
SELECT 'Начало работы', '20130422 9:00:54' UNION ALL
SELECT 'Конец работы',  '20130422 16:40:12' UNION ALL
SELECT 'Конец работы',  '20130422 18:00:14' UNION ALL
SELECT 'Начало работы', '20130423 10:56:11' UNION ALL
SELECT 'Конец работы',  '20130423 18:00:00'

SELECT tp,
CASE WHEN t.tp = 'Начало работы' THEN 
   MIN(CASE WHEN t.tp = 'Начало работы' THEN dt ELSE NULL END) 
  else
   MAX(CASE WHEN t.tp = 'Конец работы' THEN dt ELSE NULL END)
   end AS t1
FROM @t t
GROUP BY CONVERT(VARCHAR(128), t.dt, 104),tp
ORDER BY max(dt)


ну и чуть подогнал под нужный ответ
25 апр 13, 17:21    [14231546]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить