Haechtsuppe Ответов: 1

Вычитание пар в SQL


Привет Ребята,

Я должен расширить существующее приложение базы данных для отслеживания времени. Дизайн базы данных не так уж хорош, поэтому мне приходится много работать с SQL-операторами.
У нас есть такой стол:
(Дата= ddMMyyyy время= hhmmss)

Username      Indicator      Date      Time<br />
User 1        Check-in       26012017  075598<br />
User 2        Check-in       26012017  075652<br />
User 3        Check-in       26012017  075865<br />
User 1        Check-out      26012017  083652<br />
User 3        Check-out      26012017  083743<br />
User 3        Check-in       26012017  083856<br />
User 1        Check-in       26012017  085536


в начале рабочего дня пользователь должен зарегистрироваться, в конце дня пользователь должен зарегистрироваться, для каждой сигареты или кофе пользователь должен зарегистрироваться и снова зарегистрироваться.
Я хочу получить общую разницу между двумя парами, но я не понимаю, как это сделать.

Спасибо,
Винс

Что я уже пробовал:

Sum-функция, функция разности только с двумя парами вручную, но мне нужно больше

Peter Leow

Вычесть что из чего? Что представляет собой пара? Я предположил, что дата и время находятся в варчаре, если так, то этот стол действительно отстой.

Haechtsuppe

да это 'голец' поле, на основе каменной возраста таблица автономные системы as400. В наши дни никто не заботился об этих проблемах, и теперь, в 2017 году, разработчику в возрасте двадцати лет приходится иметь дело со схемами, которые старше меня : - |

1 Ответов

Рейтинг:
12

User 10734264

Пожалуйста, проверьте следующий sql-запрос, который покажет детали регистрации и выезда каждого пользователя

select username,date,time as checkin, 0 as checkout, 0 as diff 
into #temp from tablename as t
where t.indicator='Check-in'  


update t set t.checkout=isnull((select top 1 a.time from tablename as a where a.username=t.username and a.date=t.date and a.indicator='Check-out'  and a.time>t.checkin order by checkin desc),0)
from #temp as t   

update t set t.diff=(checkout-checkin)
from #temp as t 

select * from #temp


Haechtsuppe

О, Хорошо, спасибо, это работает до сих пор, но я также расширил свой веб-сервис с последней регистрационной записью, чем вычислить и записать ее обратно во временную таблицу.

"Выбрать первые 1 раз из tblmyTable Где UserName = '" + имяпользователя + " и дата = '"+ инт.Разбора(время.Метод toString("ддммгггг")) выезд+" и индикатор=','Сортировать по времени, по убыванию;";

но ваше решение также работает для меня с несколькими настройками.
Спасибо