mysql同一个表比较_比较mysql中同一个表中的行

您可以执行“自联接”(将表连接到自身)来执行查询.这里棘手的部分是知道行插入表中的顺序,并且仅比较顺序(时间上)相邻的行.我假设您有某种TIMESTAMP列,它会告诉您之前的价格变化.如果没有,则可能“ID”可以通知您(较小的ID之后插入的ID更大的行).

调用表’TAB’,使用’TRADER’提供连接,并使用’ID’提供Order,查询将需要三向自连接,如下所示:

SELECT a.trader

, SUM(IF(a.price > b.price, 1, 0)) nbr_incr

, SUM(IF(a.price < b.price, 1, 0)) nbr_decr

, SUM(IF(a.price = b.price, 1, 0)) nbr_same

FROM tab a

JOIN tab b

ON a.trader = b.trader AND a.id > b.id

LEFT OUTER JOIN tab c

ON a.trader = c.trader AND a.id > c.id AND b.id < c.id

WHERE c.id IS NULL

GROUP BY a.trader

上面的查询将表连接到自身两次,以便每个选项卡代表以下内容:

> tab a:用于比较的最近一行

> tab b:要比较的前一行

> tab c:a&之间的一行. b时间(不应该存在)

我们对’tab c’执行LEFT OUTER JOIN,因为我们实际上并不希望该行存在.在where子句中,我们仅将结果过滤到“tab c”行不存在的结果.

最后,查询在交易者上执行’GROUP BY’,而SUM()通过比较’a’和’b’行的价格来增加和减少.

这是一个有趣的挑战.希望这可以帮助!

约翰…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值