mySQL多数据解析查询

标签 mysql union

我正在尝试根据每单位时间的数据点选择两种不同分辨率的数据。现在我只是运行两个查询并使用 UNION 将它们连接起来。为了获得我想要的数字分辨率,我使用它来实现每分钟 1 个数据点:

GROUP BY UNIX_TIMESTAMP(`datetime`) DIV 60

只是想知道是否有更有效的方法来做到这一点?

SELECT (UNIX_TIMESTAMP(`datetime`)*1000) as `dt`, `value1`, `value2`
    FROM `table`
    WHERE `datetime` BETWEEN '2017-01-01' AND '2018-01-01'
    GROUP BY UNIX_TIMESTAMP(`datetime`) DIV 240
UNION
SELECT (UNIX_TIMESTAMP(`datetime`)*1000) as `dt`, `value1`, `value2`
    FROM `table`
    WHERE `datetime` BETWEEN '2017-01-01' AND '2018-01-01'
    AND TIME(`datetime`) BETWEEN TIME('12:00:00') AND TIME('13:00:00')
    GROUP BY UNIX_TIMESTAMP(`datetime`) DIV 60
ORDER BY `dt` ASC;

最佳答案

这是我遇到的另一种选择。这个似乎更快一点,并返回所选时间的实际值,而不是 mySQL 只是从每个时间组中挑选一个。

在这个表上 datetime 是一个索引。

SELECT a.`datetime`, a.`value1`, a.`value2`
    FROM `table` a
INNER JOIN
(
    SELECT `datetime`
        FROM `table`
        WHERE DATE(`datetime`) BETWEEN '2017-01-01' AND '2018-01-01'
        GROUP BY UNIX_TIMESTAMP(`datetime`) DIV 240
    UNION
    SELECT `datetime`
        FROM `table`
        WHERE DATE(`datetime`) BETWEEN '2017-01-01' AND '2018-01-01'
        AND TIME(`datetime`) BETWEEN '12:00:00' AND '13:00:00'
        GROUP BY UNIX_TIMESTAMP(`datetime`) DIV 60
    ORDER BY `datetime`
) b on a.`datetime` = b.`datetime`;

关于mySQL多数据解析查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48599967/

相关文章:

mysql - 如何在单个查询中的单个行中显示单个字段的多个值?

python - Django ORM for select max(field1) from table group by (field2);

php - 来自数组的 PDO bindParam 变量数据类型

php - 无法在写入上下文 Php 使用 $_Session 中使用函数返回值

sql - 从联合查询的结果中选择 Oracle

SQL Server : Combine several SELECT statements with "WITH" part into a UNION

mysql - AWS数据管道-从外部源提取数据?

php - 使用变量作为 php 数组

带有 Join 和 union all 的 mysql 查询

php - 无法在 php mysql 中使用 union