连续增长查询

fogvally 2018-08-11 03:09:20
表有3列: pigid, day, weight,记录每头猪每天的体重变化。我想用一个select语句,查出指定日期(比如今天)之前n天体重连续增加的pigid和day。如果用c语言做循环,用数组weight[pigid][day]来比较,很容易做,但数据量大的时候,要以数组方式保存数据很麻烦。所以想用一条select语句能查出结果。请问如何实现?

CREATE TABLE `pigweight` (
`pigId` varchar(10) DEFAULT NULL,
`day` date DEFAULT NULL,
`weight` float(255,0) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

INSERT INTO `pigweight`(`pigId`, `day`, `weight`) VALUES ('p1', '2018-01-01', 22), ('p1', '2018-01-02', 23), ('p1', '2018-01-03', 24), ('p1', '2018-01-04', 25), ('p1', '2018-01-05', 23), ('p2', '2018-01-01', 32), ('p2', '2018-01-02', 33), ('p2', '2018-01-03', 34), ('p2', '2018-01-04', 30);
...全文
127 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2018-08-16
  • 打赏
  • 举报
回复
外面再套一层查询并加条件

SELECT * FROM ( 我前面给的查询 ) DATA WHERE 持续增长天数 >=10
fogvally 2018-08-16
  • 打赏
  • 举报
回复
感谢“zjcxc--个人微信公共号同名”的指点。

不知可否实现这样的效果:
pigId date 持续增长天数
p1 2018-1-1 10
p1 2018-3-4 12
......
只显示超过10天的记录,其他记录都不显示?

zjcxc 2018-08-14
  • 打赏
  • 举报
回复
SELECT DATA.*, 
@days:=IF(@pigId=pigId AND @weight<weight, @days+1, 0) as 持续增长天数,
@pigId:=pigId, @weight:=weight
FROM pigweight DATA, (SELECT @pigId:=null, @weight:=null, @idays:=0) x
ORDER BY pigId, day
fogvally 2018-08-13
  • 打赏
  • 举报
回复
如果增加一列,记录与前一天的差值,就变成了判断此列是否连续为正(增加)。同样的问题,怎样判断连续若干条记录为正。
rucypli 2018-08-13
  • 打赏
  • 举报
回复
加一列对比昨天的结果是增加了还是减少了

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧