직원, 스테이션 및 세션이있는 데이터베이스가 있습니다. 세션은 어느 작업자가 어떤 스테이션에 있었는지를 설명합니다. 각 세션의 겹침 기간을 알려주는 쿼리를 작성했습니다. 이 쿼리와 MySQL에서 2 개의 외래 키 조합에 대한 중복 기간의 합
SELECT
sA.station_id,
sA.worker_id AS worker1,
sB.worker_id AS worker2,
SEC_TO_TIME(
TIME_TO_SEC(LEAST(sA.end,sB.end)) - TIME_TO_SEC(GREATEST(sA.start,sB.start))
) AS overlap
FROM
`sessions` AS sA,
`sessions` AS sB
WHERE
sA.station_id = sb.station_id
AND
sA.station_id = 6
AND (
sA.start BETWEEN sB.start AND sB.end
OR
sA.end BETWEEN sB.start AND sB.end
)
는 어떻게 내가 지금하고 싶은 것은 전체 오버랩 기간을 얻을 worker1에와 worker2에의 모든 조합에 대해 중복을 요약하는이
station_id worker1 worker2 overlap
6 1 1 09:00:00
6 2 1 02:30:00
6 5 1 00:00:00
6 1 1 09:00:00
6 2 1 01:30:00
6 3 1 09:00:00
...
6 12 3 02:00:00
6 14 3 01:00:00
6 17 3 02:00:00
...
같은 결과를 얻을.
SUM()과 GROUP BY를 사용하는 여러 가지 방법을 시도했지만 원하는 결과를 얻지 못했습니다.
SELECT
...
SEC_TO_TIME(
**SUM**(TIME_TO_SEC(LEAST(sA.end,sB.end)) - TIME_TO_SEC(GREATEST(sA.start,sB.start)))
) AS overlap
...
#has as result
station_id worker1 worker2 overlap
6 1 1 838:59:59
#in combination with
GROUP BY
worker1
#i get
station_id worker1 worker2 overlap
6 1 1 532:30:00
6 2 1 -33:00:00
6 3 1 270:30:00
6 5 1 598:30:00
6 6 1 542:00:00
6 7 1 508:00:00
6 8 5 53:00:00
6 9 1 54:30:00
6 10 1 310:00:00
6 11 1 -108:00:00
6 12 1 593:30:00
6 14 1 97:30:00
6 15 1 -53:30:00
6 17 1 293:30:00
마지막 결과는 비슷하지만 아직 많은 조합이 누락되었습니다. 나는 또한 조합 8-5가 표시되는 이유를 이해하지 못합니다. (판독 시간) UR 도움