SQL-запрос для подсчета общего количества времени - PullRequest
1 голос
/ 07 февраля 2010

У меня есть столбец в таблице SQL, который является временем, когда были сделаны измерения. Как показано в Таблице 1 ниже, время измерения может быть непоследовательным, повторным или нерегулярно дискретизированным (они обычно, но не всегда с интервалом 100 миллисекунд) Если отметка времени отсутствует (как 2009-12-20 11: 59: 56.1 в приведенном ниже примере), это означает, что мы не делали измерения. Итак, мне нужно знать общее количество времени, за которое мы провели измерения. Это может быть аппроксимировано как число уникальных значений _TimeStamp, умноженное на типичную метку времени (100 миллисекунд). Как мне написать этот запрос? Может потребоваться много записей (30 дней выборки за ~ 100 мс), если это влияет на решение. Спасибо!

Table1:
_TimeStamp
2009-12-20 11:59:56.0
2009-12-20 11:59:56.5
2009-12-20 11:59:56.3
2009-12-20 11:59:56.4
2009-12-20 11:59:56.4
2009-12-20 11:59:56.9 

Ответы [ 3 ]

1 голос
/ 07 февраля 2010

Подход DATEDIFF, вероятно, не сработает, если вы обеспокоены отсутствующими _TimeStamps. Прямой счет (*) удвоит счет дубликатов (2009-12-20 11: 59: 56.4 в примере).

Итак, чтобы точно ответить на вопрос:

select count(distinct _timestamp) from table

Подсчитывает количество различных _Timestamp в таблице. Затем вы можете ограничить его определенным диапазоном _Timestamp и умножить его на среднее время выборки, чтобы получить окончательный результат.

Не уверен, что производительность будет похожа, но индекс в столбце _Timestamp, вероятно, поможет.

1 голос
/ 07 февраля 2010

Как насчет

Select 100 * count(*)
From Table
Where _Timestamp between @startTime and @EndTime
0 голосов
/ 07 февраля 2010

Исходя из комментария Марка Байерса, в TSQL что-то вроде следующего запроса даст вам разницу между минимальными и максимальными временными метками в миллисекундах (изменение первого параметра DATEDIFF позволит вам изменить единицу измерения общего времени сообщается в):

 SELECT DATEDIFF(millisecond, min(_TimeStamp), max(_TimeStamp)) as TotalTime
 FROM Table1

DATEDIFF ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...