mysql - 如何使用MySql搜索连续的数字

标签 mysql sql

我有这样的表格

Period           ID       Amount

2015-04-01       01       500

2015-04-01       02       600

2015-05-01       01       500

2015-05-01       02       700

2015-06-01       01       700

2015-06-01       02       800

日期格式为:yyyy-MM-dd

我想在4月-6月不同时期、金额连续3个月增加的情况下选择ID。

例如,对于 ID : 02,其中数字从 600 到 700 再到 800 增加了 3 倍。对于 ID : 01 不被考虑,因为数字没有连续增加 3 次,因为对于ID : 01 从四月到五月没有增加,500 又500。

我需要的结果是选择ID,结果示例为:

ID
====
02

我真的需要帮助。几个星期以来我一直在想这个问题。谢谢您

最佳答案

这对于简单的查询来说并不容易,您将需要在 sql 中使用一些用户定义的变量来进行计算。这是一个方法

select
ID from (
  select
  ID,
  Amount,
  @rn:= if(
     @prev_id = ID 
     and @prev_amt <> Amount 
     and ( timestampdiff(month,@prev_day,Period) = 1 ),
    @rn+1,1) as rn,
  @prev_day:= Period,
  @prev_id:=ID,
  @prev_amt:=Amount
  from test,(select @prev_id=null,@prev_day=null,@prev_amt:=0,@rn:=1)x
  order by ID,Period
)x 
where x.rn = 3 

http://sqlfiddle.com/#!9/68b69/3

关于mysql - 如何使用MySql搜索连续的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32006402/

相关文章:

包含空行的 Mysql 转储

php - mysql_insert_id() 究竟返回什么?

java - Oracle 和 MySQL 中 PostgreSQL 的 XMIN

sql - 必须出现在postgresql的GROUP BY子句中

mysql2 gem 无法在 Windows 7 上安装 : failed to build gem native extension

mysql - 在Mysql中导入CSV不起作用

php - 遍历家庭、类别和子类别

mysql - 在 SQL 中索引列或创建新表是否更有效?

mysql - 比较 MySQL 中的日期

python - 使用 pd.read_sql 模拟多个数据库调用