Можно ли посчитать, сколько раз определенное время прошло между двумя датами? - PullRequest
0 голосов
/ 30 апреля 2019

Мне нужно написать запрос, который покажет, сколько раз полночь прошла в промежутке двух разных временных отметок. Я пытался использовать datediff, но это не совсем точно, и иногда я заканчиваю тем, что считаю больше случаев прохождения полуночи, чем должно быть.

Если у меня есть два поля даты и времени, entDtime и endDtime, можно ли посчитать, сколько раз полночь или 00:00:00.001 прошло?

Например, если у меня есть следующее:

entDtime
--------
2019-01-01 07:57:12.143

endDtime
--------
2019-01-04 03:12:44.173

И мне нужно сосчитать случаи, когда между этими двумя датами прошла полночь, логично было бы ожидать что-то в форме:

2019-01-02 00:00:00.001 (count: 1)
2019-01-03 00:00:00.001 (count: 2)
2019-01-04 00:00:00.001 (count: 3)

Где возвращаемое значение будет: 3

Возможно ли это?

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

Для полуночи вы можете просто использовать:

select datediff(day, entDtime, endDtime)

То, что вы описываете, это именно то, как datediff() работает.

0 голосов
/ 30 апреля 2019

Оригинал:

Полночь происходит только один раз в день, поэтому я думаю, что вы можете привести к дате и сделать датировку.

declare @measureDateFrom date = '20190101'

select dateTimeToMeasure,datediff(day,@measureDateFrom,cast(dateTimeToMeasure as date) days
from table

отредактировано: это должно вернуть тот же результат (и обновленона основе комментария Ларну):

declare @measureDateFrom date = '20190101'

select dateTimeToMeasure,datediff(day,@measureDateFrom,dateTimeToMeasure)  days
from table

Я думаю, что это может быть проблема XY, и я угадаю использование:

Если вы пытаетесь посчитать средние ночи между предыдущим рядом, то этоэто:

select dateTimeToMeasure,datediff(day,lag(dateTimeToMeasure,1)over(order by dateTimeToMeasure),dateTimeToMeasure)  days
from table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...