0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 9
1

Объединить строки одной таблицы, сложная задача

03.05.2017, 19:34. Показов 1347. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер!

Имею такую таблицу

Dаtetime | Username | Event (in/out)

02.05.2017 17:50:01 | Popov | Out
02.05.2017 15:54:01 | Sidorov| Out
02.05.2017 09:54:01 | Sidorov| In
02.05.2017 09:50:01 | Popov | In
02.05.2017 08:54:01 | Popov | In
02.05.2017 08:04:01 | Ivanov | In
02.05.2016 08:00:01 | Popov | In

Нужно получить такой результат
Dаtetime(in) | Dаtetime(Out) | Username | TimeOnWork
02.05.2017 09:54:01 | 02.05.2017 15:54:01 | Sidorov | 06:00:00
02.05.2017 09:50:01 | 02.05.2017 17:50:01 | Popov | 08:00:00
02.05.2017 08:54:01 | --- | Popov | ---
02.05.2017 08:04:01 | --- | Ivanov | ---
02.05.2016 08:00:01 | --- | Popov | ---

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

ЗЫ
Дублирование событий Out, в отличии от In, в исходной таблице быть не должно.

Добавлено через 2 часа 14 минут
Уже что то получил
T-SQL
1
2
3
4
5
6
7
8
SELECT 
      t1.[Datetime] as startime
          ,t2.[Datetime] as endtime      
      ,t1.[Username]
     , Datediff(Hour,t1.[Datetime],t2.[Datetime]) as WorkTime
  FROM Table1 t1
  left outer join Table1 t2 ON (t1.Username= t2.Username) AND (t2.[Event] = 'Out') and (t1.[Event] = 'In') 
AND (t2.Datetime = (SELECT MIN(DateTime) From Table1 where ([Username] = t1.Username) AND ([Datetime]>=t1.EventStamp) AND ([Event] = 'Out')))
Понимаю гуру поднимут на смех, но оно как то работает и уже есть над чем подумать.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.05.2017, 19:34
Ответы с готовыми решениями:

Перенос двух ячеек из одной строки таблицы, в одну ячейку другой таблицы.
Можно ли каким-то образом перенести так как показано на рисунках. Нужно при нажатии на клавишу,...

Перенос двух ячеек из одной строки таблицы, в одну ячейку другой таблицы.
Я объясню по кароче. Если чек бокс = true то две ячеки надо занести и объединить в одну в другой...

Как это сделать? Как объединить более одной таблицы в одном запросе?
Как это сделать? Как объединить более одной таблицы в одном запросе? Есть три таблицы: Табл1...

Выбор строки по номеру из столбца одной таблицы
Здравствуйте! Сложность в следующем. есть таблица Т1, три столбца ID,A,B. необходимо вывести...

3
3506 / 2088 / 744
Регистрация: 02.06.2013
Сообщений: 5,094
03.05.2017, 21:21 2
Лучший ответ Сообщение было отмечено Fallout13 как решение

Решение

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
with t as
(
 select
  [Datetime], Username, Event,
  lead(Event) over (partition by Username order by [Datetime]) as Next_Event,
  lead([Datetime]) over (partition by Username order by [Datetime]) as Next_Datetime
 from
  Таблица
)
select
 a.[Datetime (In)],
 a.[Datetime (Out)],
 t.Username,
 datediff(mm, a.[Datetime (In)], a.[Datetime (Out)])
from
 t cross apply
 (select t.[Datetime], case when Next_Event = 'Out' then Next_Datetime end) a([Datetime (In)], [Datetime (Out)])
where
 t.Event = 'In'
order by
 Username,
 a.[Datetime (In)];
1
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 9
04.05.2017, 11:25  [ТС] 3
--------------------------------

Добавлено через 5 часов 33 минуты
Спасибо. Работает, но до конца не понял химию.
0
3506 / 2088 / 744
Регистрация: 02.06.2013
Сообщений: 5,094
04.05.2017, 11:44 4
Цитата Сообщение от Fallout13 Посмотреть сообщение
Работает, но до конца не понял химию.
Химия простая: взять для Username в порядке Datetime следующую строку и анализировать Event'ы.
0
04.05.2017, 11:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.05.2017, 11:44
Помогаю со студенческими работами здесь

Перенести все строки из одной таблицы в другую
Это два файла истории ICQ. В одной старая история, во второй новая. Нужно объеденить, пытался...

Объединить COUNT и данные из одной таблицы
Имеется такая таблица CREATE table "Sessiya"( "faculty" NVARCHAR2(6) NOT NULL, "course"...

Задача не сложная на тему строки.
Создайте программу, которая запрашивает тестовую строку и заменяет все слоги "ра" на "пар"....

Сложная задача на подсчёт длины строки
Создать пакетный файл, который принимает в качестве аргумента полное имя файла, состоящего из одной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru