获取每小时插入数据库的行数
Get the number of rows inserted in the database per hour
我知道已经有类似的问题了,但我找不到简单明了的答案。
我有这个问题:
"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";
它使我能够获取特定 post(0909_CLIENT)上 day(>= DATEADD(dd, DATEDIFF(dd,0,GETDATE()), 0))
的所有数据库插入,按最近插入时间排序(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
中获取此号码有任何想法,请帮助我。
是否要聚合?
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
条件变为相等(因为不涉及通配符,两者是等价的)。
我知道已经有类似的问题了,但我找不到简单明了的答案。
我有这个问题:
"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";
它使我能够获取特定 post(0909_CLIENT)上 day(>= DATEADD(dd, DATEDIFF(dd,0,GETDATE()), 0))
的所有数据库插入,按最近插入时间排序(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
中获取此号码有任何想法,请帮助我。
是否要聚合?
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
条件变为相等(因为不涉及通配符,两者是等价的)。