반응형
이 날짜 사이의 시간을 직원 할당 여부에 따라 그룹화하는 방법
제가 생각하는 것보다 이게 더 쉬울 것 같은 느낌이 듭니다. 어쨌든 말이죠.
저는 회사 아이디별로 묶인 두 날짜 사이의 시간과 분 수를 알아야 합니다.그런 다음 세 개의 열이 필요합니다. 첫 번째는 해당 기간의 총 시간입니다.두 번째는 직원에게 할당된 총 시간이고 세 번째는 할당되지 않은 총 시간입니다.
내 테이블은 다음과 같습니다.
이드 | company_id | employee_id | start_date | end_날짜 |
---|---|---|---|---|
1 | 25 | 2021-08-09 07:00:00 | 2021-08-09 15:00:00 | |
8 | 25 | 46 | 2021-08-09 07:00:00 | 2021-08-09 15:00:00 |
15 | 25 | 141 | 2021-08-09 07:00:00 | 2021-08-09 15:00:00 |
22 | 25 | 100 | 2021-08-09 08:00:00 | 2021-08-09 16:00:00 |
29 | 25 | 80 | 2021-08-09 08:00:00 | 2021-08-09 16:00:00 |
90 | 1 | 2021-08-09 04:00:00 | 2021-08-09 10:00:00 | |
94 | 1 | 2021-08-09 04:00:00 | 2021-08-09 11:00:00 | |
98 | 1 | 2021-08-09 04:00:00 | 2021-08-09 18:00:00 |
여기서 저는 직원 4명에게 32시간이 할당되고 8시간은 할당되지 않은 25사의 총 40시간이 있습니다.
회사 1의 경우 총 27시간이 있으며, 이 중 0시간이 할당되고 27시간이 할당되지 않습니다.
제가 궁극적으로 찾고 있는 것은 이런 테이블입니다.
company_id | 총_시간 | 총계_총계 | 총계_미계약의 | start_date | end_날짜 |
---|---|---|---|---|---|
25 | 총 40시간 | 4명의 직원에게 32시간 할당 | 8시간 미지정 | 2021-08-09 | 2021-08-09 |
1 | 총 27시간 | 0시간 할당됨 | 지정되지 않은 27시간 | 2021-08-09 | 2021-08-09 |
저는 이런 것을 하는 것으로 시작했습니다.
SELECT
company_id,
CONCAT(TIME_FORMAT(SEC_TO_TIME(SUM(TIMESTAMPDIFF(SECOND, start_date, end_date))), '%H hours %i minutes'), ' assigned to ', COUNT(employee_id), ' employees') as total_assigned,
DATE(start_date) as start_date,
DATE(end_date) as end_date,
GROUP BY
company_id, DATE(start_date);
이렇게 하면 총 시간은 제공되지만 필요한 세 가지 차별화 요소는 제공되지 않으며, 필요한 것을 얻기 위해 쿼리를 변경하는 방법을 잘 모르겠습니다.
company_id | 총계_총계 | start_date | end_날짜 |
---|---|---|---|
1 | 0명의 직원에게 27시간 00분 할당 | 2021-08-09 | 2021-08-09 |
25 | 4명의 직원에게 40시간 00분 할당 | 2021-08-09 | 2021-08-09 |
어떤 도움이라도 주시면 대단히 감사하겠습니다.
당신이 어떤 db와 버전을 사용하고 있는지는 잘 모르겠지만, 이것이 당신이 필요로 하는 것 같습니다.문자열 연결만 추가하면 됩니다.
또 다른 불분명한 것은 start_와 end_date가 어떻게 계산되는지입니다. 그래서 저는 최소값과 최대값이 되어야 한다고 가정했습니다.
select company_id,
sum(TIMESTAMPDIFF(HOUR, start_date, end_date)) total_hours,
sum(case when employee_id is not null then TIMESTAMPDIFF(HOUR, start_date, end_date) else 0 end) total_assigned,
sum(case when employee_id is null then TIMESTAMPDIFF(HOUR, start_date, end_date) else 0 end) total_unassigned,
min(date(start_date)),
max(date(end_date))
from test_data td
group by company_id
언급URL : https://stackoverflow.com/questions/68722945/how-can-i-get-the-hours-between-these-dates-but-grouped-depending-on-whether-emp
반응형
'programing' 카테고리의 다른 글
글꼴 스타일: CSS에서 기울임꼴 대 사선 (0) | 2023.08.12 |
---|---|
도커 기계:장치에 남아 있는 공간이 없습니다. (0) | 2023.08.12 |
jQuery의 replaceWith()와 html()의 차이점은 무엇입니까? (0) | 2023.08.12 |
Powershell 경로에 일시적으로 추가 (0) | 2023.08.12 |
float 리터럴을 사용한 float 비교의 이상한 출력 (0) | 2023.08.12 |