gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 18:34:40 24 4
gpt4 key购买 nike

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/

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