我正在尝试在结果VG1的“更多”列中进行最后一次匹配。
在这种情况下,我的查询正在计算列中的所有结果,但我需要在更改之前进行计数。如果它的VG1,VG1,VG2,VG1我需要结果2,而不是3(全部)。
查询:
SELECT home, count(*) as count
from results
where more='VG2' and home='pero'
group by home
order by count(more) desc
CREATE TABLE results
(`datum` longtext, `home` longtext, `away` longtext, `more` longtext)
;
INSERT INTO results VALUES ('14.05.2016 ', 'pero', 'miha', 'VG1');
INSERT INTO results VALUES ('11.04.2016 ', 'pero', 'milan', 'VG1');
INSERT INTO results VALUES ('10.03.2016 ', 'pero', 'semenka', 'VG2');
INSERT INTO results VALUES ('24.02.2016 ', 'pero', 'torta', 'VG1');
INSERT INTO results VALUES ('14.01.2016 ', 'pero', 'miha3', 'VG2');
INSERT INTO results VALUES ('10.01.2016 ', 'pero', 'simens', 'VG2');
答案 0 :(得分:1)
您可以使用变量:
select home, more, count(*) as count
from (select *,
@set := if(@home <> home, '', @set),
@home := home,
not find_in_set(more, @set) as is_first,
@set := if (@more <> '' and @more <> more,
concat(@set, @more, ','),
@set),
@more := more
from results,
(select @set:='', @prev:='', @home='') init
order by home, datum desc) base
where is_first
group by home, more
order by count(*) desc
输出:
| home | more | count |
|------|------|-------|
| pero | VG1 | 2 |
| pero | VG2 | 1 |
请参阅fiddle
内部查询中的is_first
列指示记录是否属于每more
个第一批home
个值。这是外部查询中的一个条件,因此count
函数返回所需的结果。
如果您只需要某个home
和more
值的结果,那么只需将其添加到外部查询的where
子句中。