mysql - 选择时间戳 x 和时间戳 y 之间的数据,返回为 z 行数(缩小结果集)

标签 mysql sql

我正在尝试在作为给定行数返回的 2 个给定时间戳之间选择数据。

需要考虑 3 个变量;

  • 时间戳 1
  • 时间戳2
  • 数据点数量

到目前为止,我已经有了这个(而且还可以),但没有返回所需的行数。在下面的查询中,我尝试在 2019-07-142019-07-15 之间选择 250 条记录,但它返回 48行。

SELECT
    AVG(`value`) AS `avg`,
    `createdAt` AS `dtime`,
    `createdAt` * 1 AS `dtime_int`,
    ROUND(
        `createdAt` / (
            (CONVERT('2019-07-15', DATETIME) - CONVERT('2019-07-14', DATETIME)
        ) / 250)
    ) AS `groupBy`
FROM `samples`
WHERE `createdAt` BETWEEN '2019-07-14' AND '2019-07-15'
GROUP BY `groupBy`
ORDER BY `dtime` DESC;

所以我猜这不是最好的方法。欢迎任何和所有建议!

编辑:这是我正在使用的测试数据集,我正在保持进度:samples.sql

最佳答案

您的问题可能是之间<​​createdAt 很可能是一个日期时间,因此时间部分会干扰您想要执行的操作。

我强烈建议您使用直接比较。如果您想要两天,那么:

WHERE createdAt >= '2019-07-14' AND
      createdAt < '2019-07-16'

如果您只想要 2019-07-14:

WHERE createdAt >= '2019-07-14' AND
      createdAt < '2019-07-15'

将其拆分为给定数量的行实际上是不可能的。毕竟,所有时间戳都可能相同,那么如何获得不同的垃圾箱呢?

但是您可以将其分成相同大小的垃圾箱:

SELECT floor( (timestampdiff(second, '2019-07-15', createdat) /
               timestampdiff(second, '2019-07-15', '2019-07-17')
              ) * 48
            ) as grp,
       AVG(`value`) AS `avg`
FROM samples s
WHERE createdAt >= '2019-07-14' AND
      createdAt < '2019-07-16'
GROUP BY grp
ORDER BY grp DESC;

关于mysql - 选择时间戳 x 和时间戳 y 之间的数据,返回为 z 行数(缩小结果集),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57071326/

相关文章:

javascript - 通过Id获取记录XSJS

mysql - 在MySql中检索列名而不是外部ID

JAVA SQL - 找不到适用于 jdbc 的驱动程序 :derby

SQL Server 2008 R2 - 具有(移动)日期的动态透视/逆透视

c# - EF : Potential runtime violation of table如何解决

mysql - 在 Windows 上的 mysql 中启用\配置 openssl

mysql - 基于一个公共(public)列连接具有不同列和格式的两个表 - 需要显示重复项

c# - 这个 LINQ 查询什么时候进入数据库?

mysql - 如何在 Rails MySQL 应用程序中使用 json 列类型?

mysql - Sql 查询在连接表中搜索多个匹配项