나는 다음과 같은 테이블 구조가 있습니다의 MySQL TIMESTAMPDIFF 합
+----+---------------------+---------------------+
| id | created_at | closed |
+----+---------------------+---------------------+
| 1 | 2017-04-03 04:00:00 | 2017-04-03 04:30:00 |
| 2 | 2017-04-03 04:25:00 | 2017-04-03 04:35:00 |
+----+---------------------+---------------------+
내 실제 SQL 쿼리에서 내가 timestap 필드에 두 날짜 사이의 diffirence을 clacualte하는 timestampdiff
를 사용합니다. 이 diffirent 시간 간격으로 시작 ctreated_at
및 모든 레코드의 closed_at
경우 아무런 문제가 없다, 그래서 나는 모든 행에 소요 시간을 얻을 수 다음 것 같이
SELECT SUM(timestampdiff(SECOND, created_at, closed_at)) as TotalTime FROM table
내 문제가 위의 표시 테이블처럼, 시간을 간격 교차. 위의 쿼리는 900
을 발생합니다하지만 나는 같은 것을 시도 600
이 있어야합니다 결과는
SELECT timestampdiff(
MINUTE,
a.created_at,
(SELECT max(b.closed) from times as b WHERE b.created_at < a.closed)
) as periods
FROM `times` as a
을 :
여기+---------+
| periods |
+---------+
| 35 |
| 10 |
+---------+
내가를 represnts whuch 첫 번째 결과를 원하는 겹쳐진 기간의 순 시간. 이전 쿼리와 MAX
를 사용해야 첫 번째 레코드를 반환하지만 futere에 추가 된 다른 기간 그룹 테이블하게되어 방치로 이어질 것입니다 :
+----+---------------------+---------------------+
| id | created_at | closed |
+----+---------------------+---------------------+
| 1 | 2017-04-03 04:00:00 | 2017-04-03 04:30:00 |
| 2 | 2017-04-03 04:25:00 | 2017-04-03 04:35:00 |
| 3 | 2017-04-03 05:00:00 | 2017-04-03 05:15:00 |
+----+---------------------+---------------------+
위의 쿼리 반환 :
+---------+
| periods |
+---------+
| 35 |
| 10 |
| 15 |
+---------+
다시에게 여기서는 첫 번째 기록에서 이전에 계산 된 기간을 설명하기 때문에 두 번째 기록을 원하지 않습니다. 실제로 MySQL에서는 위의 예에서 두 개의 레코드 또는 세 개의 레코드 만 가져올 수 있지만 두 번째는 null, 0, 음수 값 등이 다른 실제 값과 구별되도록하는 것은 가능하지 않습니다.
mysql에서는 불가능하다고 생각합니다. –