SQL最新日期和事件

时间:2015-10-23 13:02:00

标签: sql sql-server tsql reporting-services ssrs-2008

我需要提取特定事件发生的最新日期。在DB中,我有一个由每个用户多次完成的测试。我想只有当用户的最后一次测试结果低于200时。

create table #temp_VL (cln_urn varchar(50), tst_date datetime, tst_df_test_name varchar (50), VL DECIMAL (10,2), cln_pk varchar(100)) 

我正在将数据导入的表格。我遇到的问题是有些人在某些时候测试了200以下,但是后来又回到了200以上。我可以把所有测试过的人都拉到200以下,但出于某种原因,不是在最后一次测试时。

2 个答案:

答案 0 :(得分:0)

如果我已正确理解您的要求,那就是:

  

向我提供用户得分低于200的每个用户的最新记录

以下代码显示了实现此目的的一个示例:

DECLARE @tabTestResults TABLE
    (
        UserId INT,
        TestDate DATE,
        Result INT
    )

INSERT
INTO    @tabTestResults
        (
            UserId,
            TestDate,
            Result
        )
VALUES  ( 1, '2015-01-01', 180 ),
        ( 1, '2015-07-23', 200 ),
        ( 1, '2015-08-23', 190 ),
        ( 1, '2015-09-23', 210 ),
        ( 2, '2015-01-01', 210 ),
        ( 2, '2015-10-23', 190 ),
        ( 3, '2015-10-23', 170 ),
        ( 4, '2015-10-23', 220 )


SELECT  UserId, TestDate, Result
FROM
        (
            SELECT  ROW_NUMBER() OVER (PARTITION BY UserId ORDER BY TestDate DESC) AS RowNumber, *
            FROM    @tabTestResults
            WHERE   Result < 200
        ) SQ
WHERE   RowNumber = 1

返回:

UserId  TestDate    Result
1       2015-08-23  190
2       2015-10-23  190
3       2015-10-23  170

答案 1 :(得分:0)

假设您希望用户在您表达的最后一个日期评分为200以下。

  

我希望只有当用户的最后一次测试结果低于200时。

您可以使用以下查询。

$scope.state = UserService.getUserState();

使用我举例说明的数据你会得到这个:

state._currentUser