gpt4 book ai didi

php - 是否可以在 mysql 表中按日期(时间戳)为每个组选择 10 行?如何进行?

转载 作者:行者123 更新时间:2023-11-29 15:53:25 24 4
gpt4 key购买 nike

我有一个表,其属性为时间戳、传感器名称、温度、湿度。我所做的是根据 DESC 顺序中的时间戳进行排序来获取结果,并且我有条件获取 1 天 7 天或上个月的结果。但问题是,当我访问旧记录时,我得到了更多的值。我需要做的是,由于我的数据是按时间戳排序的,因此每个日期最多需要 15 到 20 行/记录。假设我正在获取 6 月 10 日到 6 月 17 日的数据,每个日期有 100 条记录。我只需要特定日期的 10/20 条记录(每天前 20 条)。

我的 MySQL 版本是 5.7.26,我尝试使用 ROW_NUMBER 但没有帮助

SELECT datestamp AS TIME,Temperature AS TEMPERATURE FROM table_name WHERE NodeAdd = 'SensorName' and datestamp >= DATE_ADD(CURRENT_DATE,INTERVAL -'$somevar' DAY) ORDER BY datestamp DESC

上面的代码显示了我如何获取不同日期的数据,$somevar变量是硬编码的,如果用户选择日期,则为-1,如果选择上周,则为-7,上个月为-30。我每天最多需要 20 行/记录。

注意::我的表中没有 ID 列或唯一/主键,因此我尝试仅通过日期进行分区来获取特定行。

最佳答案

您需要为每个组创建行号(日期),然后仅保留行号 < 10 的记录,因为您希望每组有 10 条记录。以下脚本只是一个指南,您可以将其与您的表结构相匹配以获得所需的输出 -

SELECT * FROM
(
SELECT *,
(
CASE DateColumn
WHEN @DateColumn THEN @curRow := @curRow + 1
ELSE @curRow := 1 AND @DateColumn := DateColumn
END
) AS rank
FROM
(
SELECT *,CAST(<your_date_column> AS DATE) AS `DateColumn`
FROM Your_table
)A
,(SELECT @curRow := 0, @DateColumn := '') r
ORDER BY <your_date_column>
)A WHERE Rank < 11

关于php - 是否可以在 mysql 表中按日期(时间戳)为每个组选择 10 行?如何进行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56624937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com