sophia kylie taylor Ответов: 1

Как получить данные за 2 часа. (Суммируйте дату и время)


Здравствуйте, я хотел бы попросить вашей помощи в этом, будет ли там так или иначе подводить итоги
2-часовые записи на конкретную дату? Ниже приведен вывод, когда я попытался запустить свой ниже измененный запрос.

LoadingDatetime | Для IPhone
2020-03-25 11:00:00 |16
2020-03-25 11:01:00 |3
2020-03-25 11:02:00 |4
2020-03-25 11:03:00 |5
2020-03-25 11:04:00 |6
2020-03-25 11:05:00 |7
2020-03-25 11:06:00 |8
2020-03-25 11:07:00 |9
2020-03-25 11:08:00 |0
2020-03-25 11:09:00|9
2020-03-25 11:10:00|0
и так до 12:59

То, что я хотел бы получить в качестве результата, состояло в том, чтобы захватить 2-часовые записи, выполненные в определенную дату

LoadingDatetime | Для IPhone
2020-03-25 11:00:00 |56
2020-03-25 01:00:00 |10
2020-03-25 03:00:00 |23
2020-03-25 05:00:00 |13

Что я уже пробовал:

SELECT 
[LoadingDateTime]
,(select count(Id) from dbo.Products WHERE [LoadingDateTime] >=  DateAdd(hour, -2, DateAdd(hour, DateDiff(hour, '1900-01-01', getdate()), 0)) 
And [LoadingDateTime] < DateAdd(hour, DateDiff(hour, '1900-01-01', getdate()), 0)) LoadCount
,COUNT(convert(int,[Apple_Iphone])) Apple_Iphone
,COUNT(convert(int,[Peripheral_Devices])) Peripheral_Devices
,COUNT(convert(int,[Desktops])) Desktops
,COUNT(convert(int,[Laptops])) Laptops
,COUNT(convert(int, [Desktops]) + convert(int,[Laptops])) IT_Devices



FROM dbo.Products 
WHERE [LoadingDateTime] >=  DateAdd(hour, -2, DateAdd(hour, DateDiff(hour, '1900-01-01', getdate()), 0)) And [LoadingDateTime] < DateAdd(hour, DateDiff(hour, '1900-01-01', getdate()), 0)

GROUP BY [LoadingDateTime]
order by [LoadingDateTime]

Jörgen Andersson

Неужели это всегда будут одни и те же два часа в день? Или прошло два часа с момента первого происшествия?

sophia kylie taylor

прошло два часа с момента первого происшествия

1 Ответов

Рейтинг:
0

OriginalGriff

Вместо того чтобы группировать по LoadingDateTime, вам нужно использовать отдельный выбор, чтобы добавить столбец временной группы к данным, который объединяет данные в две часовые группы. Затем вы можете сгруппировать их по этому столбцу и использовать агрегатную функцию SUM для их объединения.

Группировка по необработанному значению DATETIME никогда не даст вам того, что вы хотите.

Начните с получения права выбора, а затем выберите из него с помощью группы by.

Цитата:
(select DateAdd(second,7200, '1900-01-01 00:00:00' + convert(int,(7200 * floor(datediff(HOUR, [LoadingDateTime], '1900-01-01 00:00:00' )/2)))) ReportTimestamp


не могли бы вы помочь проверить этот сценарий? Я получаю ошибку в этой строке при выполнении запроса


Ну да - а чего вы ожидали? '1900-01-01 00:00:00' не является целым числом, поэтому вы не можете добавить к нему целое число.

Подумайте о том, что вы пытаетесь сделать: сгруппируйте данные в двухчасовые "слоты".
Поэтому начните с удаления минут и секунд из текущего значения даты-времени, чтобы "сгруппировать" их в одночасовые слоты.
Когда у вас это работает, подумайте о том, как это можно расширить до двухчасовых слотов.
Один шаг за один раз здесь!

[редактировать]
Я сделаю это проще - я решил, что это может быть полезно, поэтому я создал пользовательскую функцию для удаления минут и секунд и отправил ее в качестве подсказки: Удаление минут и секунд из даты и времени[^]
Двухчасовые окна довольно тривиальны, когда у вас есть такая работа
[/редактировать]


sophia kylie taylor

выберите функция dateadd(второй,7200, '1900-01-01 00:00:00' + конвертировать(тип int(7200 * пол(функция datediff(час, [LoadingDateTime], '1900-01-01 00:00:00' )/ (2)))) ReportTimestamp

не могли бы вы помочь проверить этот сценарий? Я получаю ошибку в этой строке при выполнении запроса

OriginalGriff

Ответ обновлен

OriginalGriff

Ответ снова обновлен.