Для первого вывода вы можете попробовать этот запрос:
SELECT SEC_TO_TIME(TIME_TO_SEC(MAX(timestamp))-TIME_TO_SEC(MIN(timestamp))) AS "Total Time",
Category FROM your_table GROUP BY category;
, в результате чего TIME_TO_SEC
преобразует ваше значение TIME
в общее количество секунд.Таким образом, MAX(timestamp)
минус MIN(timestamp)
значение для каждой категории (оба были преобразованы в значение в секундах).Затем результат этого преобразовывается обратно во времени с помощью операции SEC_TO_TIME
.Поэтому вы получите Total Time
в формате чч: мм: сс.
Для второго вывода вы можете попробовать этот запрос:
SELECT MIN(timestamp) AS "Timestamp",category
FROM your_table GROUP BY category UNION
SELECT MAX(timestamp) AS "Timestamp",category
FROM your_table GROUP BY category ORDER BY category;
Получение значения MIN(timestamp)
верх запроса объединения и значение MAX(timestamp)
ниже.Закончено ORDER BY category
.
Если у вас есть DATE
столбцов и вы хотите разделить каждую категорию по дате, вы просто добавляете столбец в свой выбор и группируете по.Например:
SELECT Date,
SEC_TO_TIME(TIME_TO_SEC(MAX(timestamp))-TIME_TO_SEC(MIN(timestamp))) AS "Total Time",
Category FROM your_table GROUP BY date,category;
И
SELECT Date,MIN(timestamp) AS "Timestamp",category
FROM your_table GROUP BY category UNION
SELECT Date,MAX(timestamp) AS "Timestamp",category
FROM your_table GROUP BY Date,category ORDER BY date,category;
РЕДАКТИРОВАТЬ: Попробуйте этот запрос ниже:
SELECT * FROM
(SELECT * FROM your_table
WHERE category="b"
GROUP BY DATE(timestamp),UNIX_TIMESTAMP(timestamp) DIV 180) sub1
LEFT JOIN
(SELECT * FROM your_table WHERE category="b") sub2
ON sub1.category=sub2.category AND DATE(sub1.timestamp)=DATE(sub2.timestamp)
AND sub1.timestamp<>sub2.timestamp
AND sub2.timestamp BETWEEN sub1.timestamp AND sub1.timestamp + INTERVAL 3 MINUTE;