如何从sql表中获取所有行,但每24小时显示一行?目前我的sql select将显示表中的所有行,我想每天显示一行,即24小时
global $wpdb;
$result = $wpdb->get_results( "SELECT `message` FROM `my_Db_table`; ");
echo "<style>";
echo "body {font-family: Arial;}";
echo ".table_container { padding: 10px 12px 0px 12px; border: 1px solid #ccc; }";
echo ".table_container th { background-color:lightblue; color:white; font-weight:bold; border-left: 1px solid white;}";
echo "</style></head>";
echo "<body>";
echo "<div class=\"table_container\"><table>";
echo "<tr><th style=\"padding-left:10px;\">Quote of Day</th></tr>";
foreach ($result as $row) {
echo "<tr><td>".$row->quote."</td></tr>";
}
echo "</table></div>";
?>
这里有一个解决方案,假设您希望在任何 24 小时内收到 first 消息。
SELECT `message`
FROM (
SELECT
ROW_NUMBER() OVER (PARTITION BY DATE(my_datetime_column) ORDER BY my_datetime_column) AS rownum
`message`
FROM `my_Db_table`
) AS t
WHERE rownum = 1;
这使用窗口函数将行号应用于结果,每天的行号从 1 开始。然后,外部查询的 WHERE 子句中的条件仅过滤行号为 1 的行,即每天的第一行。
只需更改窗口函数的排序顺序,您就可以轻松获取每天的最后一条消息:
... ROW_NUMBER() OVER (PARTITION BY DATE(my_datetime_column)
ORDER BY my_datetime_column DESC) AS rownum ...
^^^^
您仍然需要 rownum = 1 的行。因为窗口顺序相反,所以这将是当天的最后一行。