我在表格中有以下行。
MatchIDAuto CompetitionIDAuto TeamHome TeamAway MatchDate
4770 65 New Zealand South Africa 2017-02-19
4771 65 New Zealand South Africa 2017-02-21
4772 65 New Zealand South Africa 2017-02-25
4773 65 New Zealand South Africa 2017-03-01
4774 65 New Zealand South Africa 2017-03-04
我需要能够做的是当我执行以下操作时:
select * from Match2 where MatchIDAuto=4772
知道这是系列中的第三场比赛。如何使用查询动态计算?
如果没有 ORDER BY
子句,则无法保证 ID 为 4772
的行是系列中的第三行。这是因为没有 order by 子句的数据库可能会相应地生成不同的订单执行计划。
因此,首先要做的是将 order by 子句添加到查询中。根据数据,可能会MatchIDAuto
或MatchDate
,我将根据您的选择离开。MySql 中获取行订单号的查询将是:
select *
from (
select m.*,
@ord:=@ord+1 roworder
from Match2 m,
(select @ord:=0) t
ORDER BY MatchDate
) sub
where MatchIDAuto=4772;
这将返回订单 3 的每一列加上 roworder
。在这个查询中,我选择了MatchDate
字段,因为对我来说,您的数据作为订单的列更有意义。
此技术将创建一个变量并将其汇总到每一行。您只需将其包装在子查询中并查询即可。