Получить количество строк, вставленных в базу данных в час

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

У меня есть этот запрос:

"SELECT dbo.tbTransaction.dateHeure, dbo.tbTransaction.Etat, dbo.tbPoste.nomPoste
        FROM dbo.tbTransaction 
        INNER JOIN dbo.tbPoste ON dbo.tbTransaction.ID_poste = dbo.tbPoste.ID_POSTE
        WHERE dbo.tbPoste.id_site LIKE 47 
        AND dbo.tbPoste.nomPoste LIKE '0909_CLIENT'
        AND dateHeure >= DATEADD(dd, DATEDIFF(dd,0,GETDATE()), 0)
        ORDER BY dateHeure DESC";

Это позволяет мне получить все вставки базы данных day(>= DATEADD(dd, DATEDIFF(dd,0,GETDATE()), 0)) для определенного сообщения (0909_CLIENT), отсортированные по времени самой последней вставки (ORDER BY dateHeure DESC).

Я хотел бы иметь возможность получать количество вставок в час, цель состоит в том, чтобы иметь возможность генерировать живую графику час за часом.

Мне удается получить общее количество вставок в течение дня с помощью:

$params = array();
    $options = array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
    $result = sqlsrv_query( $conn, $sql , $params, $options );
    $row_count = sqlsrv_num_rows( $result ). PHP_EOL;
    echo '<br>';
     if ($row_count === false)
     echo "Error in retrieveing row count;
    else {
      echo $row_count;
     } 

Я могу видеть строки, введенные в базу данных в определенное время, с помощью:

$five = "05:";
$six = "06:";
$seven = "07:";


if ($result === false) {
    die(print_r(sqlsrv_errors(), true));
} else {
    while ($row = sqlsrv_fetch_array($result)) {
        $heureformate = $row["dateHeure"]->format('H:i');
        
        if (strpos($heureformate, $five) !== false) {
            echo $heureformate;
            echo '<br>';
            //count(array($heureformate));
        } elseif (strpos($heureformate, $six) !== false) {
            echo $heureformate;
            echo '<br>';
        } elseif (strpos($heureformate, $seven) !== false) {
            echo $heureformate;
            echo '<br>';
        } 
    } 
}

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

Если у вас есть идеи, как получить это число в SQL или PHP, пожалуйста, помогите мне.

Попробуйте добавить group by hour(your_datetime_column) к вашему запросу.

bassxzero 21.12.2020 11:59

Я пробовал, но у меня "Час не является распознанным именем встроенной функции"

Ryan Loche 21.12.2020 12:17

О, извините, я думал, что это mysql.

bassxzero 21.12.2020 12:18

Не волнуйтесь, спасибо за предложение ;)

Ryan Loche 21.12.2020 12:26
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout.
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout.
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для...
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
2
4
208
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хотите агрегацию?

select  datepart(hour, t.dateheure), count(*) as cnt
from dbo.tbtransaction t
inner join dbo.tbposte p on t.id_poste = p.id_poste
where p.id_site = 47 and p.nomposte = '0909_client' and t.dateheure >= cast(gedate() as date)
group by datepart(hour, dateheure)

Это фильтрует набор данных для строк, чьи dateheure принадлежат текущему дню, и подсчитывает количество записей в каждый час.

Обратите внимание, что я упростил логику фильтрации даты и превратил условия like в равенство (поскольку подстановочные знаки не используются, оба эквивалентны).

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

Ryan Loche 09.01.2021 14:01

Другие вопросы по теме