如何获取所有值高于先前值的记录。 例如,下表中的第一个范围从 id 1 开始到 id 6 结束,下一个范围是从 7 到 10,等等...
id Open
1 1.30077
2 1.30088
3 1.30115
4 1.30132
5 1.30135
6 1.30144
7 1.30132
8 1.30137
9 1.30152
10 1.30158
11 1.30149
12 ...
最佳答案
USE test
DROP TABLE IF EXISTS rangedata;
CREATE TABLE rangedata
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
open FLOAT
) ENGINE=MyISAM;
INSERT INTO rangedata (open) VALUES
(1.30077),(1.30088),(1.30115),(1.30132),
(1.30135),(1.30144),(1.30132),(1.30137),
(1.30152),(1.30158),(1.30149),
(1.30077),(1.30088),(1.30115),(1.30132),
(1.30135),(1.30144),(1.30132),(1.30137),
(1.30152),(1.30158),(1.30149),
(1.30077),(1.30088),(1.30115),(1.30132),
(1.30135),(1.30144),(1.30132),(1.30137),
(1.30152),(1.30158),(1.30149);
mysql> USE test
Database changed
mysql> DROP TABLE IF EXISTS rangedata;
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE rangedata
-> (
-> id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> open FLOAT
-> ) ENGINE=MyISAM;
Query OK, 0 rows affected (0.09 sec)
mysql> INSERT INTO rangedata (open) VALUES
-> (1.30077),(1.30088),(1.30115),(1.30132),
-> (1.30135),(1.30144),(1.30132),(1.30137),
-> (1.30152),(1.30158),(1.30149),
-> (1.30077),(1.30088),(1.30115),(1.30132),
-> (1.30135),(1.30144),(1.30132),(1.30137),
-> (1.30152),(1.30158),(1.30149),
-> (1.30077),(1.30088),(1.30115),(1.30132),
-> (1.30135),(1.30144),(1.30132),(1.30137),
-> (1.30152),(1.30158),(1.30149);
Query OK, 33 rows affected (0.00 sec)
Records: 33 Duplicates: 0 Warnings: 0
mysql>
这是 LEFT JOIN 查询
SET @grp = 1;
SELECT A.open prev,(@grp:=@grp+IF(A.open<B.open,1,0)) group_number
FROM rangedata A LEFT JOIN rangedata B ON A.id= B.id+1;
这是它的输出
mysql> SELECT A.open prev,(@grp:=@grp+IF(A.open<B.open,1,0)) group_number
-> FROM rangedata A LEFT JOIN rangedata B ON A.id= B.id+1;
+---------+--------------+
| prev | group_number |
+---------+--------------+
| 1.30088 | 1 |
| 1.30115 | 1 |
| 1.30132 | 1 |
| 1.30135 | 1 |
| 1.30144 | 1 |
| 1.30132 | 2 |
| 1.30137 | 2 |
| 1.30152 | 2 |
| 1.30158 | 2 |
| 1.30149 | 3 |
| 1.30077 | 4 |
| 1.30088 | 4 |
| 1.30115 | 4 |
| 1.30132 | 4 |
| 1.30135 | 4 |
| 1.30144 | 4 |
| 1.30132 | 5 |
| 1.30137 | 5 |
| 1.30152 | 5 |
| 1.30158 | 5 |
| 1.30149 | 6 |
| 1.30077 | 7 |
| 1.30088 | 7 |
| 1.30115 | 7 |
| 1.30132 | 7 |
| 1.30135 | 7 |
| 1.30144 | 7 |
| 1.30132 | 8 |
| 1.30137 | 8 |
| 1.30152 | 8 |
| 1.30158 | 8 |
| 1.30149 | 9 |
| 1.30077 | 9 |
+---------+--------------+
33 rows in set (0.01 sec)
使用用户定义的变量,您只需监视每一行并查看前一个值何时更大。准备好查询了吗?在这里:
SET @prev = '0.00000';
SET @grp = 1;
SELECT id,open,(@grp:=@grp+increasing) group_number FROM
(SELECT id,open,IF(@prev<=open,0,1) increasing,(@prev:=open) FROM rangedata) A;
这是您的样本数据的三倍:
这是查询的执行:
mysql> SET @prev = '0.00000';
Query OK, 0 rows affected (0.00 sec)
mysql> SET @grp = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT id,open,(@grp:=@grp+increasing) group_number FROM
-> (SELECT id,open,IF(@prev<=open,0,1) increasing,(@prev:=open) FROM rangedata) A;
+----+---------+--------------+
| id | open | group_number |
+----+---------+--------------+
| 1 | 1.30077 | 1 |
| 2 | 1.30088 | 1 |
| 3 | 1.30115 | 1 |
| 4 | 1.30132 | 1 |
| 5 | 1.30135 | 1 |
| 6 | 1.30144 | 1 |
| 7 | 1.30132 | 2 |
| 8 | 1.30137 | 2 |
| 9 | 1.30152 | 2 |
| 10 | 1.30158 | 2 |
| 11 | 1.30149 | 3 |
| 12 | 1.30077 | 4 |
| 13 | 1.30088 | 4 |
| 14 | 1.30115 | 4 |
| 15 | 1.30132 | 4 |
| 16 | 1.30135 | 4 |
| 17 | 1.30144 | 4 |
| 18 | 1.30132 | 5 |
| 19 | 1.30137 | 5 |
| 20 | 1.30152 | 5 |
| 21 | 1.30158 | 5 |
| 22 | 1.30149 | 6 |
| 23 | 1.30077 | 7 |
| 24 | 1.30088 | 7 |
| 25 | 1.30115 | 7 |
| 26 | 1.30132 | 7 |
| 27 | 1.30135 | 7 |
| 28 | 1.30144 | 7 |
| 29 | 1.30132 | 8 |
| 30 | 1.30137 | 8 |
| 31 | 1.30152 | 8 |
| 32 | 1.30158 | 8 |
| 33 | 1.30149 | 9 |
+----+---------+--------------+
33 rows in set (0.00 sec)
关键点是:每次出现新的组号时,都会告诉您下一个掉落的值。
警告:如果 prev 和 open 之间存在一些浮点问题,第二个查询不是完美的解决方案。如果它们彼此离谱地接近,则可能是不对的。这是编写存储过程之外的最佳尝试。
关于mysql - 当值高于先前值时选择范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20982722/
请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or
假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit
状态:我正在构建一个应用程序,其中需要一个可供用户选择颜色的字段,该字段将包含RGB颜色代码字符串。我已经测试了一个看起来很漂亮但效果不佳的。它是“挑剔的颜色”,并托管在此存储库中:https://github.com/Astorsoft/picky-color.在这里我打开一个关于它的一些问题的问题。问题:请建议我在Rails3应用程序中使用一些颜色选择器。 最佳答案 也许页面上的列表jQueryUIDevelopment:ColorPicker为您提供开箱即用的产品。原因是jQuery现在包含在Rails3应用程序中,因此使用基
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时
我正在尝试使用在我的代码中是动态的Time.local来安排时间。在每个月的第一天,我传递的值是Time.local(2009,9,-1,0)。在PHP中,这会将时间设置为上个月的最后一天。在ruby中,我只是得到“ArgumentError:参数超出范围”。是我用错了方法还是什么?谢谢。 最佳答案 您应该使用DateTime类而不是Time。(您可能需要先require'date'并安装activesupportgem。)它比Time更通用,并且可以用DateTime.civil(2009,9-1,-1,0)做你想做的事。为天
我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or
我希望用户从一个模型的三个选项中选择一个。即我有一个模型视频,可以被评为正面/负面/未知目前我有三列bool值(pos/neg/unknown)。这是处理这种情况的最佳方式吗?为此,表单应该是什么样的?目前我有类似的东西但显然它允许多项选择,而我试图将它限制为只有一个..怎么办? 最佳答案 如果要使用字符串列,让我们说rating。然后在你的表单中:#...#...它只允许一个选择编辑完全相同但使用radio_button_tag: 关于ruby-on-rails-Rails单选按钮-模