Mysql 晚上下班后。“现在刚起床。”罗德赫,我试着按照你提供的顺序处理你的数据,结果成功了。我所做的唯一更改是将我的自动增量列添加到最内部的ORDERBY子句中。如果您的实际表也有这样的自动增量,请添加它。如果没有,则是因为它们上的精确时间似乎让引擎选择它首先想要
Mysql 晚上下班后。“现在刚起床。”罗德赫,我试着按照你提供的顺序处理你的数据,结果成功了。我所做的唯一更改是将我的自动增量列添加到最内部的ORDERBY子句中。如果您的实际表也有这样的自动增量,请添加它。如果没有,则是因为它们上的精确时间似乎让引擎选择它首先想要,mysql,Mysql,晚上下班后。“现在刚起床。”罗德赫,我试着按照你提供的顺序处理你的数据,结果成功了。我所做的唯一更改是将我的自动增量列添加到最内部的ORDERBY子句中。如果您的实际表也有这样的自动增量,请添加它。如果没有,则是因为它们上的精确时间似乎让引擎选择它首先想要的返回数据的时间。看看你的电视机,让我知道。要确认正确的退货顺序,请尝试“从您的表中选择*,其中Player='Arne'按Player、timestamp排序……让我知道您在没有auto inc列的情况下得到了什么 +--------+---
晚上下班后。“现在刚起床。”罗德赫,我试着按照你提供的顺序处理你的数据,结果成功了。我所做的唯一更改是将我的自动增量列添加到最内部的ORDERBY子句中。如果您的实际表也有这样的自动增量,请添加它。如果没有,则是因为它们上的精确时间似乎让引擎选择它首先想要的返回数据的时间。看看你的电视机,让我知道。要确认正确的退货顺序,请尝试“从您的表中选择*,其中Player='Arne'按Player、timestamp排序……让我知道您在没有auto inc列的情况下得到了什么
+--------+------------------+--------+--------+
| player | timestamp | points | streak |
+--------+------------------+--------+--------+
| John | 22/11/2012 23:01 | -2 | 0 |
| John | 22/11/2012 23:02 | 3 | 1 |
| John | 22/11/2012 23:04 | 5 | 2 |
| John | 22/11/2012 23:05 | -2 | 0 |
| John | 22/11/2012 23:18 | 15 | 1 |
| John | 23/11/2012 23:20 | 5 | 2 |
| Chris | 27/11/2012 22:12 | 20 | 1 |
| Chris | 27/11/2012 22:14 | -12 | 0 |
| Chris | 27/11/2012 22:17 | 4 | 1 |
| Chris | 27/11/2012 22:18 | -4 | 0 |
| Chris | 27/11/2012 22:20 | 10 | 1 |
| Chris | 27/11/2012 22:21 | 20 | 2 |
| Chris | 27/11/2012 22:22 | 90 | 3 |
+--------+------------------+--------+--------+
+--------+--------+-----------+
| player | points | maxstreak |
+--------+--------+-----------+
| John | 20 | 2 |
| Chris | 120 | 3 |
+--------+--------+-----------+
select t.*,
(select max(timestamp) from t t2 where t2.timestamp <= t.timestamp and t2.player = t.player and t2.streak = 0
) as StreakStartTimeStamp
from t
where t.timeStamp = (select max(streak) from t t2 where t.player = t2.player)
select t.player,
sum(s.points)
from t join
(select t.*,
(select max(timestamp) from t t2 where t2.timestamp <= t.timestamp and t2.player = t.player and t2.streak = 0
) as StreakStartTimeStamp
from t
where t.streak = (select max(streak) from t t2 where t.player = t2.player)
) s
on t.player = s.player
group by t.player
SELECT
Final.Player,
MAX( Final.MaxStreak ) MaxStreak,
MAX( Final.MaxStreakPoints ) MaxStreakPoints
FROM
(
SELECT
PreOrd.Player,
PreOrd.TimeStamp,
PreOrd.Points,
@nStreak := case when PreOrd.Points < 0 then 0
when PreOrd.Player = @cLastPlayer then @nStreak +1
else 1 end Streak,
@nStreakPoints := case when @nStreak = 1 then PreOrd.Points
when @nStreak > 1 then @nStreakPoints + PreOrd.Points
else 0 end StreakPoints,
@nMaxStreak := case when PreOrd.Player != @cLastPlayer then @nStreak
when @nStreak > @nMaxStreak then @nStreak
else @nMaxStreak end MaxStreak,
@nMaxStreakPoints := case when PreOrd.Player != @cLastPlayer then @nStreakPoints
when @nStreak >= @nMaxStreak and @nStreakPoints > @nMaxStreakPoints then @nStreakPoints
else @nMaxStreakPoints end MaxStreakPoints,
@cLastPlayer := PreOrd.Player PlayerChange
FROM
( select
S.Player,
S.TimeStamp,
S.Points
from
Scores2 S
ORDER BY
S.Player,
S.TimeStamp,
S.`index` ) PreOrd,
( select
@nStreak := 0,
@nStreakPoints := 0,
@nMaxStreak := 0,
@nMaxStreakPoints := 0,
@cLastPlayer := '~' ) SQLVars
) as Final
group by
Final.Player