mysql - 查询查找最频繁更改的记录

标签 mysql sql

source   |  voltage | timestamp
CIRCUIT1 | 2.4 | XXX
CIRCUIT1 | 2.4 | XXX
CIRCUIT1 | 2.5 | XXX
CIRCUIT1 | 2.4 | XXX
CIRCUIT1 | 2.4 | XXX
CIRCUIT1 | 2.6 | XXX
CIRCUIT1 | 2.4 | XXX
CIRCUIT1 | 2.4 | XXX
CIRCUIT1 | 2.4 | XXX

CIRCUIT2 | 2.4 | XXX
CIRCUIT2 | 2.5 | XXX
CIRCUIT2 | 2.4 | XXX
CIRCUIT2 | 2.4 | XXX
CIRCUIT2 | 2.5 | XXX
CIRCUIT2 | 2.4 | XXX
CIRCUIT2 | 2.5 | XXX
CIRCUIT2 | 2.4 | XXX
CIRCUIT2 | 2.5 | XXX

CIRCUIT3 | 2.4 | XXX
CIRCUIT3 | 2.4 | XXX
CIRCUIT3 | 2.8 | XXX
CIRCUIT3 | 2.4 | XXX
CIRCUIT3 | 2.4 | XXX
CIRCUIT3 | 2.8 | XXX
CIRCUIT3 | 2.4 | XXX
CIRCUIT3 | 2.4 | XXX
CIRCUIT3 | 2.4 | XXX

输出应该只是 CIRCUIT2

CIRCUIT1 的电压值仅变化 2 倍 CIRCUIT2 的电压值变化 4 倍 尽管变化很大,CIRCUIT3 的电压值仅变化 2 次

谁能告诉我如何继续编写一个将输出 CIRCUIT2 作为答案的 SQL 查询?

(我又添加了一列 TIMESTAMP)

最佳答案

这是一种方法(不确定这是在 Mysql 中执行此操作的最佳方法)

SELECT *
FROM   tabtest
WHERE  source = (SELECT a.source
                 FROM   (SELECT a.source,a.voltage,a.timestamp,Count(*) AS rn
                         FROM   tabtest a
                                JOIN tabtest b
                                  ON a.source = b.source
                                     AND a.timestamp >= b.timestamp
                         GROUP  BY a.source,a.voltage,a.timestamp) a
                        LEFT JOIN (SELECT a.source,a.voltage,a.timestamp,Count(*) AS rn
                                   FROM   tabtest a
                                          JOIN tabtest b
                                            ON a.source = b.source
                                               AND a.timestamp >= b.timestamp
                                   GROUP  BY a.source,a.voltage,a.timestamp) b
                               ON a.source = b.source
                                  AND a.rn = b.rn + 1
                 GROUP  BY a.source
                 ORDER  BY Sum(CASE WHEN a.voltage <> COALESCE(b.voltage, a.voltage) THEN 1 ELSE 0 END) DESC Limit 1) 
<小时/>

这里的想法是找到source中每条记录的先前电压值,然后仅当当前记录与先前记录相比发生变化时才使用条件聚合对记录进行计数。

使用窗口函数 http://rextester.com/PJFL7743 就容易得多

关于mysql - 查询查找最频繁更改的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45396979/

相关文章:

c# - 如何保存每周、每两周和每月的订单

java - JPA 查询验证数据库中是否存在输入

mysql - 连接表的平均值

sql - 如何使用 GROUP BY 在 T-SQL 中返回同一行的多个列

php - 使用插入查询的 id

mysql - 如何使用 funcool/clojure.jdbc 从 MySQL 查询中获取区分大小写的列名

sql - POSTGRES - 将(子)表达式错误评估为 NULL

mysql - 创建包含静态 BIT 值的 MySQL View

php - 关于MySQL安全: charset,转义字符等的困惑

mysql - 简单的 Sphinx 和 mySQL 查询