2

我有一个桌面游戏日,其中包含以下列 date_played、winner、loser 和以下值,

(Jun-03-14, USA, China)
(Jun-05-14, USA, Russia)
(Jun-06-14, France, Germany)
.
.
.
.
(Jun-09-14, USA, Russia)

我需要获取美国连续赢得 3 行的所有实例。

我尝试了以下查询。

Select 
    date, winner, loser, 
    RANK() OVER (PARTITION BY winner ORDER BY date rows 2 preceding) as rank 
from playday;
4

3 回答 3

1

首先,您需要了解他们最后一次输球是什么时候。第二次计算获胜次数,大于(>)他们最后一次失败的日期。如果 count > 3,则第三个返回大于上次损失的所有行。

抱歉,我面前没有 SQL 解析器来正确地将其放入代码中。

Set @team_name = "USA";
select date, winner, loser
from playday
where (select count(*) as wins_since_loss from playday
       where playday.winner = @team_name
       and playday.date >
    (select max(date) as losing_date from playday where playday.loser = @team_name)) = 3
于 2014-07-01T04:27:14.703 回答
1

您可以使用以下查询。

select winner,loser,date,cnt from (select winner, loser, date, date - lag(date,3) over ( order by date) as cnt  from playday) where cnt >=3
于 2015-08-12T05:37:24.073 回答
-1

查询是提取美国连续赢得 3 次的行序列,而不是更少或更多(我使用日期作为 date1)

select   date1, winner, loser from
(
  select count (*) over (partition by change) as id, date1,winner,loser from 
  (
    select date1,winner,loser,lag_loser, sum(case when loser <> lag_loser and (loser='USA' or lag_loser='USA') then 1 else 0 end) over (order by date1 rows unbounded preceding) as change from 
    (
      select date1, winner,loser, lag(loser) over (order by date1) as lag_loser from
      (
        select date1, winner, loser from playday
        where winner ='USA' or loser = 'USA'
        ORDER BY date1 ASC
      )
    )
  )
)
where winner ='USA' and id =3
于 2015-12-16T12:04:01.707 回答