Я пытаюсь получить общее количество часов и монет каждого emp из базы данных SQL по дате, исходя из столбца даты и времени ниже, для справки. Пожалуйста, нужна ваша поддержка, как это сделать.
Также есть столбец типа, где записи 0 и 1 означают 0 IN и 1 Out.
Ниже показано изображение для справки о том, как у меня есть данные в SQL и какой мне нужен отчет.
Я полагаю, вы имеете в виду минуты, а не мятные?
А изображения идентичны? Зачем публиковать их дважды!
Где твой код! что ты уже испробовал? Stack Overflow не является бесплатным сервисом для написания кода. Предполагается, что вы попытаетесь написать код самостоятельно. После дополнительных исследований если у вас возникла проблема, вы можете опубликовать то, что вы пробовали, с четким объяснением того, что не работает, и предоставить Минимальный, полный и проверяемый пример
Попробуйте запрос, используя DATEDIFF(минута,[Время на входе], [Тайм-аут]) в качестве [Всего минут]. Следуйте этому примеру, чтобы отформатировать его как часы и минуты stackoverflow.com/questions/17733616/…
Разве об этом не спрашивали пару дней назад? Хотя и с изображениями в темном режиме stackoverflow.com/questions/78693913/…
Как вы хотите, чтобы результаты форматировались, когда сотрудник приходит на работу в 23:00 и уходит после полуночи?
Как вы хотите, чтобы результаты были отформатированы, если сотрудник работает более 48 часов?
Как вы хотите, чтобы результаты были отформатированы, если у сотрудника несколько входов/выходов в день, или несколько входов с 0 выходами, или несколько выходов с 0 входов, или странное несовпадение входов/выходов за день?
Я использовал CTE, чтобы разбить вычисления и сделать их более читабельными. Если у каждого сотрудника есть только 2 записи в день, можно использовать min/max и игнорировать флаг InOut.
WITH CTE as
(
SELECT CONVERT(date, TimeDate) as [Date],
EmpNumber,
CAST(Min(TimeDate) as time) as TimeIN,
CAST(Max(TimeDate) as time) as TimeOut ,
DATEDIFF(minute,CAST(Min(TimeDate) as time),CAST(Max(TimeDate) as time)) as TotalMinutes
FROM TableEntry
GROUP BY CONVERT(date, TimeDate),EmpNumber
)
SELECT [Date], EmpNumber,
RIGHT('0'+CAST(DATEPART(hour, TimeIN) as varchar(2)),2) + ':' +
RIGHT('0'+CAST(DATEPART(minute, TimeIN)as varchar(2)),2) as TimeIn,
RIGHT('0'+CAST(DATEPART(hour, TimeOut) as varchar(2)),2) + ':' +
RIGHT('0'+CAST(DATEPART(minute, TimeOut)as varchar(2)),2) as TimeOut,
CAST(TotalMinutes / 60 AS VARCHAR(8)) + ':' + FORMAT(TotalMinutes % 60, 'D2') as TotalMinutes
FROM CTE
Один из способов справиться со сценарием, когда сотрудник работает после полуночи dbfiddle.uk/LYu1Ri87
Спасибо за ваш быстрый ответ. Только одна проблема: у некоторых сотрудников есть несколько входов и выходов, а вторая проблема заключается в том, что если кто-то пропустил удар, например, пропущенный вход или выход, то время не должно отображаться, а результат должен быть нулевым. но согласно вашему запросу, это здорово, но проблема только в том, что если какой-либо удар пропустил, оба столбца показывают одно и то же время, а результат показывает ноль, что правильно. Пожалуйста, помогите мне и в этом.
Пожалуйста, не используйте изображения (как указано в правилах вопросов), используйте уценку таблицы.