2013-10-09 2 views
1

У меня есть уникальный запрос запроса.SQL Query Count и математические операции

я запускаю этот запрос:

select * from documentationissues 
where dateAdded is not null 
and dateAdded >= '2013-10-09 10:37:15.483' 

Это вернет меня, однако многие строки были вставлены с пунктом dateAdded. То, что я пытаюсь сделать, - это выполнить всю мою математику в запросе.

Мне нужно выяснить, сколько минут прошло с момента предложения DateAdded. Мне нужно получить количество строк, которые возвращаются. Затем мне нужно выяснить, сколько строк выполняется в среднем за минуту, а затем в час. И тогда скажите, было ли сделано 6 000 000 файлов. Сколько дней потребуется для обработки всех файлов со средней дневной скоростью.

Если я запустил запрос прямо сейчас, он вернул 2100 результатов с сегодняшнего дня в 10:56:15.

Так прошло бы 19 минут, что составляет около 110 рядов в минуту и ​​около 6600 в час.

Я не знаю, как сделать все математике в операторе отбора с группировкой и т.д.

ответ

3

Вот еще один вариант, который также включает в себя все необходимые поля спрашивали:

SELECT M.RowsReturned, M.MinutesPassed, 
     M.RowsReturned/M.MinutesPassed AS AvgPerMinute, 
     M.RowsReturned/M.MinutesPassed * 60 AS AvgPerHour, 
     6000000/M.RowsReturned/M.MinutesPassed/1440 AS DaysToProcess 
FROM (
    SELECT COUNT(*) AS RowsReturned, 
    DATEDIFF(minute, '2013-10-09 10:37:15.483', CURRENT_TIMESTAMP) AS MinutesPassed 
    FROM documentationissues 
    WHERE dateAdded is NOT NULL 
    AND dateAdded >= '2013-10-09 10:37:15.483' 
) AS M 
+0

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

+0

** @ Джеймс Уилсон **, я считаю, что это должно быть '/ 1440' вместо' * 1440'. Я отредактировал свой ответ. Это то, что вы ищете? – Linger

+0

Это исправление. Нужно переключить * и//. Спасибо за ответ. :) '6000000/M.RowsReturned * M.MinutesPassed/1440 AS DaysToProcess' –

2

Попробуйте это:

SELECT COUNT(*)/DATEDIFF(minute, '2013-10-09 10:37:15.483', GETDATE()) AS AvgPerMin, 
     COUNT(*)/DATEDIFF(minute, '2013-10-09 10:37:15.483', GETDATE()) * 60 AS AvgPerHr 
from documentationissues 
where dateAdded is not null 
and dateAdded >= '2013-10-09 10:37:15.483' 
+0

Спасибо, что помогли мне получить то, что мне было нужно. У меня возникли проблемы с тем, что мне нужно было сгруппироваться. Рад видеть, что это было намного легче, чем я это делал. –

Смежные вопросы