【发布时间】:2014-06-09 19:42:23
【问题描述】:
我有一个要求,我需要将数据分组到相等数量的 ob 行中。由于 mysql 没有 rownum() 我正在模拟这种行为:
SET @row:=6;
SELECT MAX(agg.timestamp) AS timestamp, MAX(agg.value) AS value, COUNT(agg.value) AS count
FROM
(
SELECT timestamp, value, @row:=@row+1 AS row
FROM data
WHERE channel_id=52 AND timestamp >= 0 ORDER BY timestamp
) AS agg
GROUP BY row div 8
ORDER BY timestamp ASC;
注意:根据Can grouped expressions be used with variable assignments?,此查询可能不是 100% 正确,但它确实有效。
另一个要求是计算分组集之间的行差异。我一直在寻找使用子查询连接同一个表的解决方案:
SET @row:=6;
SELECT MAX(agg.timestamp) AS timestamp, MAX(agg.value) AS value, COUNT(agg.value) AS count
FROM
(
SELECT timestamp, value, @row:=@row+1 AS row
FROM data
WHERE channel_id=52 AND timestamp >= 0 ORDER BY timestamp
) AS agg
LEFT JOIN data AS prev
ON prev.channel_id = agg.channel_id
AND prev.timestamp = (
SELECT MAX(timestamp)
FROM data
WHERE data.channel_id = agg.channel_id
AND data.timestamp < MIN(agg.timestamp)
)
GROUP BY row div 8
ORDER BY timestamp ASC;
不幸的是,错误:
Error Code: 1054. Unknown column 'agg.channel_id' in 'on clause'
知道如何编写这个查询吗?
【问题讨论】:
-
这应该只是在
agg子查询的选择列表中公开channel_id的问题。目前,您只能在WHERE子句中使用它。 (我没有分析这是否会给你想要的结果,但它会清除 1054 错误)