如何返回在MySQL中实际上是“连续的” GROUP BY的内容。换句话说,GROUP BY是否尊重记录集的顺序?
例如,SELECT MIN(col1), col2, COUNT(*) FROM table GROUP BY col2 ORDER BY col1
从下表中,col1是唯一的有序索引:
1个
2个
3分
4例
5个
6个
返回:
1一4
3 b 2
但我需要返回以下内容:
1一2
3 b 2
5 2
使用:
SELECT MIN(t.id) 'mi',
t.val,
COUNT(*)
FROM (SELECT x.id,
x.val,
CASE
WHEN xt.val IS NULL OR xt.val != x.val THEN
@rownum := @rownum+1
ELSE
@rownum
END AS grp
FROM TABLE x
JOIN (SELECT @rownum := 0) r
LEFT JOIN (SELECT t.id +1 'id',
t.val
FROM TABLE t) xt ON xt.id = x.id) t
GROUP BY t.val, t.grp
ORDER BY mi
这里的关键是创建一个允许分组的人为值。
以前,更正了Guffa的答案:
SELECT t.id, t.val
FROM TABLE t
LEFT JOIN TABLE t2 on t2.id + 1 = t.id
WHERE t2.val IS NULL
OR t.val <> t2.val
问题内容: 我如何返回在MySQL中实际上是“连续的” GROUP BY。换句话说,GROUP BY是否尊重记录集的顺序? 例如,从下表中,col1是唯一的有序索引: 返回: 但我需要返回以下内容: 问题答案: 采用: 这里的关键是创建一个允许分组的人为值。 以前,更正了Guffa的答案:
问题内容: 所以,我有一张表,上面有这样的行: 每次扫描警报时(即每次触发或清除警报时)都会添加“已扫描的警报”行。任何警报都会添加带有特定Ev_Custom1的行。第一列Ev_Message包含一个计算机ID,该ID使我可以将警报与其他计算机分开。(您不喜欢任意的列名吗?)超过900条独特的警报消息。 我希望查询返回的内容是这样的: 这将是两个日期之间过滤的查询。我可以更改进入表的数据,但是有9
问题内容: 我有一个包含类别,日期和费率的表。每个类别在不同日期可以具有不同的费率,一个类别在给定日期只能具有一个费率。 唯一索引(类别,日期,费率)我希望针对每个类别将所有连续的日期范围归为一组,并仅保留范围的开始和结束。对于前面的示例,我们将有: 我在论坛中找到了一个类似的解决方案,但并未完全给出结果 请参见SQL FIDDLE 如何在mysql中做同样的事情?请帮忙! 问题答案: MySQL
问题内容: 我在DataFrame中有一列带有值: 如何将它们这样分组? 问题答案: 你可以groupby通过自定义使用:
问题内容: 假设我有一个带有数字列的表(我们称其为“分数”)。 我想生成一个计数表,该表显示每个范围内得分出现的次数。 例如: 在此示例中,分数在0到9之间的行有11行,分数在10到19之间的行有14行,分数在20-29范围内的行有3行。 有一个简单的方法来设置它吗?您有什么推荐的吗? 问题答案: 在SQL Server 2000上,投票率最高的答案均不正确。也许它们使用的是其他版本。 这是它们在
我试图在MySQL5.7中执行一个计算,并按日期和制造商ID分组。我的目标是为每一天和制造商找到这个公式的结果。 一个制造商的select语句如下所示: 它基于表products(保存所有产品信息)和表search(保存每个制造商的所有搜索结果)。 基本上,它所做的是计算结果集中每个制造商的百分比。 现在这对其中一个起作用了,因为我在case语句中筛选了这个特定的制造商。但是,我如何用group