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

Откуда: SPb
Сообщений: 8
EmployerName EventType LocalType
Ustinov Sergey 1 20 Sep 2011 08:03:28
Ustinov Sergey 1 20 Sep 2011 08:03:35
Ustinov Sergey 2 20 Sep 2011 17:04:11
Ustinov Sergey 2 20 Sep 2011 17:04:11

Есть такая выборка, нужно ужесточить условие и выбрать при EventType = 1 наименьшее время, а при EventType = 2 наибольшую дату. Думаю что нужен вложенный запрос, но как это осуществить что то не сообразить.

З.ы. только начал освоение MS SQL, так что возможно очевидные вещи пока не понятны мне.
21 сен 11, 15:12    [11312677]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимальной даты из таблицы  [new]
iap
Member

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

CREATE TABLE напишите здесь, пожалуйста.
А то типы полей неизвестны.
Вообще-то, странная задача для начинающего...
21 сен 11, 15:14    [11312696]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимальной даты из таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
serrrega,

CREATE TABLE напишите здесь, пожалуйста.
А то типы полей неизвестны.
Вообще-то, странная задача для начинающего...
И версию сервера назовите.
21 сен 11, 15:14    [11312705]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимальной даты из таблицы  [new]
serrrega
Member

Откуда: SPb
Сообщений: 8
iap
iap
serrrega,

CREATE TABLE напишите здесь, пожалуйста.
А то типы полей неизвестны.
Вообще-то, странная задача для начинающего...
И версию сервера назовите.


Версия MSSQL 2008R2

Насчёт Create table извините но непонятно что необходимо сделать.
21 сен 11, 15:17    [11312734]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимальной даты из таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
serrrega
и выбрать при EventType = 1 наименьшее время

время без даты ?
21 сен 11, 15:18    [11312749]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимальной даты из таблицы  [new]
serrrega
Member

Откуда: SPb
Сообщений: 8
EventType тип данных int
LocalTime (в первом посте ошибочка) тип данных Datetime
21 сен 11, 15:19    [11312767]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимальной даты из таблицы  [new]
serrrega
Member

Откуда: SPb
Сообщений: 8
Glory
serrrega
и выбрать при EventType = 1 наименьшее время

время без даты ?

с датой, надо чтоб в результирующем выводе было вот это

EmployerName EventType LocalType
Ustinov Sergey 1 20 Sep 2011 08:03:28
Ustinov Sergey 1 20 Sep 2011 08:03:35
Ustinov Sergey 2 20 Sep 2011 17:04:11
Ustinov Sergey 2 20 Sep 2011 17:04:11
21 сен 11, 15:22    [11312788]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимальной даты из таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Вы бы сразу написали - это задание с sql-ex или нет?
А то в последнее время рука отвечать не поднимается.
21 сен 11, 15:22    [11312792]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимальной даты из таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
serrrega
Ustinov Sergey 2 20 Sep 2011 17:04:11
Ustinov Sergey 2 20 Sep 2011 17:04:11

Это две одинаковые записи - почему одна из них не выбрана
21 сен 11, 15:24    [11312816]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимальной даты из таблицы  [new]
serrrega
Member

Откуда: SPb
Сообщений: 8
iap
Вы бы сразу написали - это задание с sql-ex или нет?
А то в последнее время рука отвечать не поднимается.

нет это реальная база. Задание для обучения от начальника.
21 сен 11, 15:24    [11312822]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимальной даты из таблицы  [new]
qwerty112
Guest
serrrega
Glory
пропущено...

время без даты ?

с датой, надо чтоб в результирующем выводе было вот это

EmployerName EventType LocalType
Ustinov Sergey 1 20 Sep 2011 08:03:28
Ustinov Sergey 1 20 Sep 2011 08:03:35
Ustinov Sergey 2 20 Sep 2011 17:04:11
Ustinov Sergey 2 20 Sep 2011 17:04:11

select EmployerName, min(LocalType)
from ...
where EventType=1
group by EmployerName

union all

select EmployerName, max(LocalType)
from ...
where EventType=2
group by EmployerName
21 сен 11, 15:25    [11312834]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимальной даты из таблицы  [new]
shut-up-and-skate
Member

Откуда: ВАО
Сообщений: 4259
serrrega
Glory
пропущено...

время без даты ?

с датой, надо чтоб в результирующем выводе было вот это

EmployerName EventType LocalType
Ustinov Sergey 1 20 Sep 2011 08:03:28
Ustinov Sergey 1 20 Sep 2011 08:03:35
Ustinov Sergey 2 20 Sep 2011 17:04:11
Ustinov Sergey 2 20 Sep 2011 17:04:11


очень похоже на лог проходных... :) хочеш обмануть систему? :)
21 сен 11, 15:28    [11312857]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимальной даты из таблицы  [new]
начальника
Guest
serrrega
Задание для обучения от начальника.


эх, serrrega, serrrega. Для обучения, а не списывания!
21 сен 11, 15:33    [11312907]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимальной даты из таблицы  [new]
serrrega
Member

Откуда: SPb
Сообщений: 8
Glory
serrrega
Ustinov Sergey 2 20 Sep 2011 17:04:11
Ustinov Sergey 2 20 Sep 2011 17:04:11

Это две одинаковые записи - почему одна из них не выбрана

Видимо там различия в милисекундах. Надо при ивенттайп =2 чтоб выбирал последний временной штамп
21 сен 11, 15:43    [11313007]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимальной даты из таблицы  [new]
serrrega
Member

Откуда: SPb
Сообщений: 8
начальника
serrrega
Задание для обучения от начальника.


эх, serrrega, serrrega. Для обучения, а не списывания!

я уже пол дня бьюсь, откровенно времени жалко, да и чувствую сегодня моя голова не сообразит уже.
21 сен 11, 15:56    [11313119]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимальной даты из таблицы  [new]
trew
Member

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

Тип поля LocalType - datetime надеюсь?

SELECT EmployerName, min(LocalType) AS d1, max(LocalType) AS d2
FROM Table_1 
GROUP BY EventType, EmployerName, CONVERT(varchar(8), LocalType,112)
21 сен 11, 16:02    [11313174]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимальной даты из таблицы  [new]
shut-up-and-skate
Member

Откуда: ВАО
Сообщений: 4259
serrrega
начальника
пропущено...


эх, serrrega, serrrega. Для обучения, а не списывания!

я уже пол дня бьюсь, откровенно времени жалко, да и чувствую сегодня моя голова не сообразит уже.


, а qwerty112 разве не ответил на твой вопрос???
21 сен 11, 16:03    [11313186]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимальной даты из таблицы  [new]
trew
Member

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

Это было решение с ошибкой. поторопился.
21 сен 11, 16:04    [11313196]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимальной даты из таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SELECT TOP(1) WITH TIES *
FROM T
WHERE EventType IN(1,2)
ORDER BY
 ROW_NUMBER()
 OVER
 (
  PARTITION BY EventType
  ORDER BY
   CASE EventType WHEN 1 THEN CAST(CAST(LocalTime AS TIME)AS DATETIME)END,
   CASE EventType WHEN 2 THEN CAST(CAST(LocalTime AS DATE)AS DATETIME)END DESC
 );
21 сен 11, 16:06    [11313227]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимальной даты из таблицы  [new]
trew
Member

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

Такой вариант будет работать?
SELECT  День, EmployerName, Приход, Уход
FROM
(
SELECT CONVERT(varchar(8), LocalType,112) AS День, EmployerName, min(LocalType) AS Приход
FROM Table_1 
WHERE EventType =1
GROUP BY EmployerName, CONVERT(varchar(8), LocalType,112)
) AS t1
LEFT JOIN
(
SELECT CONVERT(varchar(8), LocalType,112), EmployerName, max(LocalType) AS Уход
FROM Table_1 
WHERE EventType =2
GROUP BY EmployerName, CONVERT(varchar(8), LocalType,112)
) t2 
ON t1.День = t2.День AND t1.EmployerName = t2.EmployerName
21 сен 11, 16:22    [11313432]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимальной даты из таблицы  [new]
Начинающий SQL 2008
Member

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

declare @t table (EmployerName varchar(200), EventType int, LocalTime datetime)
insert @t values ('Ustinov Sergey', 1, '20 Sep 2011 08:03:28'), ('Ustinov Sergey', 1, '20 Sep 2011 08:03:35'), ('Ustinov Sergey', 2, '20 Sep 2011 17:04:11'),
('Ustinov Sergey', 2, '20 Sep 2011 17:04:11.5')

select * from @t

;with cte as (
 select *, row_number() over (partition by EmployerName, EventType
 order by case when EventType = 1 then LocalTime end asc, case when EventType = 2 then LocalTime end desc) [rn]
 from @t
)
select EmployerName, EventType, LocalTime from cte where rn = 1
21 сен 11, 16:25    [11313466]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимальной даты из таблицы  [new]
serrrega
Member

Откуда: SPb
Сообщений: 8
Спасиб за помощь. Это на самом деле не совсем списывание. Потому как дат много фамилий тоже ещё доделывать и доделывать.
21 сен 11, 16:51    [11313778]     Ответить | Цитировать Сообщить модератору
 Re: Выбор минимальной даты из таблицы  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
Совершенно верно!
Именно по количеству фамилий в таблицах учитывается труд разработчика
21 сен 11, 16:59    [11313905]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить