Вы рассматриваете end_date
для каждой строки. Вам нужно проверить, больше ли число end_date
, чем дата окончания проверяемой даты.
я не могу попробовать это на данный момент, но псевдо-рабочий MySQL может выглядеть следующим образом:
SELECT Sum(
Timestampdiff(minute, start, LEAST(end_date, '2016-08-24 23:59:59'))
) AS shift_mins
FROM
`student_shift_history`
WHERE student_id = 9652
AND `start` BETWEEN '2016-08-24 00:00:01' AND '2016-08-24 23:59:59'
Запрос должен сказать:
Возьмите все записи, где начало дата находится в диапазоне, а затем для всех этих, суммируйте количество минут между временем начала и end_date
или в конце дня, в котором я заинтересован, если это до end_date
.
Вопрос о том, чтобы добавить оставшиеся минуты на следующий день имеет аналогичное решение.
Прежде всего, вы должны убедиться, что start
обрабатывают в smiliar образом при расчете минут:
SELECT Sum(
Timestampdiff(
minute,
GREATEST(start, '2016-08-24 00:00:00'),
LEAST(end_date, '2016-08-24 23:59:59')
)
) AS shift_mins
Подобно последнего изменения, это следующее:
- Если
start
день назад, считайте только с самого начала, которое вас интересует
- Если
start
- это некогда время, которое вас интересует, все как есть как и раньше
Теперь вам также необходимо скорректировать свой пункт WHERE
, чтобы убедиться, что вы получаете все виды записей, которые вы хотите.Эти
- отчетов, где оба
start
и end_date
находятся в течение дня вы заинтересованы в
- Records, где
start
это до дня вы заинтересованы в и end_date
после того дня
- записей, где
start
находится в течение дня, когда вас интересует, и end_date
в этот день
- Записи, где
start
- в течение дня, и end_date
- после
Условием для этого является удивительно простым:
WHERE
start < `2016-08-24 23:59:59` AND end_date > `2016-08-24 00:00:00`
Так весь оператор должен выглядеть следующим образом:
SELECT Sum(
Timestampdiff(
minute,
GREATEST(start, '2016-08-24 00:00:00'),
LEAST(end_date, '2016-08-24 23:59:59')
)
) AS shift_mins
FROM
`student_shift_history`
WHERE
student_id = 9652 AND
start < `2016-08-24 23:59:59` AND
end_date > `2016-08-24 00:00:00`
Это должно работать. Если это не так, вы все равно получите изображение :-)
спасибо человеку, он отлично поработал, но он поднимает еще один вопрос. Теперь, как я могу проверить оставшиеся минуты на следующий день? –
Затем вы должны изменить свое условие. Я собираюсь изменить свой ответ. –
, если вы могли бы задать вопрос, охватывающий оба сценария, это было бы очень оценено. –