【问题标题】:Is it possible to select 10 rows for each group by date(timestamp) in mysql table ? How to proceed?是否可以在 mysql 表中按日期(时间戳)为每个组选择 10 行?如何进行?
【发布时间】:2019-06-17 04:58:21
【问题描述】:

我有一个表,其中包含时间戳、传感器名称、温度、湿度等属性。我所做的是通过根据 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 列或唯一/主键,所以我试图仅通过日期使用分区来获取特定行。

【问题讨论】:

    标签: php mysql sql database phpmyadmin


    【解决方案1】:

    您需要为每个组创建行号,即日期,然后只保留行号

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-18
      • 2023-01-24
      • 1970-01-01
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多