Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 首先,你可能应该先按dateAdded排序,然后按分数排序,以获得排名。此外,问题还不清楚他是否有每一个新分数的记录,或者他们是否在现有行中求和一个新分数;这将改变您的查询bit@beder:但我先按添加日期排序,然后按分数排序(也许你指的是我在宽限期内编_Sql_Sql Server 2008 - Fatal编程技术网

Sql 首先,你可能应该先按dateAdded排序,然后按分数排序,以获得排名。此外,问题还不清楚他是否有每一个新分数的记录,或者他们是否在现有行中求和一个新分数;这将改变您的查询bit@beder:但我先按添加日期排序,然后按分数排序(也许你指的是我在宽限期内编

Sql 首先,你可能应该先按dateAdded排序,然后按分数排序,以获得排名。此外,问题还不清楚他是否有每一个新分数的记录,或者他们是否在现有行中求和一个新分数;这将改变您的查询bit@beder:但我先按添加日期排序,然后按分数排序(也许你指的是我在宽限期内编,sql,sql-server-2008,Sql,Sql Server 2008,首先,你可能应该先按dateAdded排序,然后按分数排序,以获得排名。此外,问题还不清楚他是否有每一个新分数的记录,或者他们是否在现有行中求和一个新分数;这将改变您的查询bit@beder:但我先按添加日期排序,然后按分数排序(也许你指的是我在宽限期内编辑的第一个版本)。啊,对不起,我认为在我评论时没有刷新。这是一个很好的答案,但不是我想要的,因为我没有正确描述问题。当团队的综合得分达到阈值时,而不是当团队中的某个人成功得分超过阈值时,我是在寻找答案。虽然这会起作用,但您需要重新计算列的可能时


首先,你可能应该先按dateAdded排序,然后按分数排序,以获得排名。此外,问题还不清楚他是否有每一个新分数的记录,或者他们是否在现有行中求和一个新分数;这将改变您的查询bit@beder:但我先按添加日期排序,然后按分数排序(也许你指的是我在宽限期内编辑的第一个版本)。啊,对不起,我认为在我评论时没有刷新。这是一个很好的答案,但不是我想要的,因为我没有正确描述问题。当团队的综合得分达到阈值时,而不是当团队中的某个人成功得分超过阈值时,我是在寻找答案。虽然这会起作用,但您需要重新计算列的可能时间,这将是资源密集型的。我正在寻找一个运行一次的解决方案。虽然这会起作用,但您需要重新计算列的时间,这将是资源密集型的。我正在寻找一个一次性解决方案。
DateAdded
Score
Team
WITH CTE AS
(
  SELECT 
    DateAdded, Score, Team,
    DENSE_RANK() OVER (Order By DateAdded ASC, Score DESC) AS Rank
  FROM dbo.TableName
  WHERE
    Score >= Threshold
)
SELECT 
  DateAdded, Score, Team
FROM CTE
WHERE
  Rank = 1
select team, min(dateadded) as FirstPastThreshold
from (select dateadded, score, team,
             (select sum(score) from t t2 where t2.team = t.team and t2.dateadded <= t.dateadded) as cumulativescore
      from t
     ) t
where cumulativescore>= @threshhold
group by team
Use tempdb
Create Table Scoring (DateAdded DateTime, Score INT, Team INT)
INSERT Scoring SELECT GetDate(), 100, 1
INSERT Scoring SELECT GetDate()+1, 150, 1
INSERT Scoring SELECT GetDate()+1, 50, 2
INSERT Scoring SELECT GetDate()+2, 75, 2
INSERT Scoring SELECT GetDate()-10, 75, 2


DECLARE @Threshhold INT
SET @Threshhold = 125

-- Table which includes a cumulative score
;WITH tbl AS 
(
SELECT 
    Team, 
    DateAdded, 
    Score, 
    -- This column calculates the current score + the sum of past scores
    IsNull((SELECT Sum(t2.Score) CumScore FROM Scoring t2 WHERE t2.Team = t.Team AND t2.DateAdded < t.DateAdded),0) 
    + Score AS  CumScore
FROM Scoring t
)

-- Find first record > threshold
SELECT TOP 1 * FROM tbl
WHERE CumScore >= @Threshhold
ORDER BY DateAdded ASC
SELECT TOP 1 T1.Dateadded, T1.Team FROM Table1 T1
 JOIN Table1 T2
  ON T1.Team = T2.Team
    and T1.Dateadded >= T2.Dateadded
GROUP BY T1.Dateadded, T1.Team
HAVING SUM(T2.Score) >= @Threshold
ORDER BY T1.Dateadded