Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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最新日期和事件_Sql_Sql Server_Tsql_Reporting Services_Ssrs 2008 - Fatal编程技术网

SQL最新日期和事件

SQL最新日期和事件,sql,sql-server,tsql,reporting-services,ssrs-2008,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以上。我可以把所有考过

我需要提取特定事件发生的最新日期。在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分以下的人都拉出来,但由于某种原因,最后一次考试的日期是什么时候

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

请给出每个用户得分低于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

假设您只想要在您表示的最后一个日期中评分低于200的用户

我只想当用户的上一次测试结果低于200

您可以使用下面的查询

with CTE as
(
    select 1 UsrID, '2015-08-01' [Date], 190 rate
    union
    select 1 UsrID, '2015-08-02' [Date], 290 rate
    union
    select 2 UsrID, '2015-08-03' [Date], 190 rate
    union
    select 3 UsrID, '2015-08-04' [Date], 390 rate
    union
    select 3 UsrID, '2015-08-07' [Date], 150 rate
    union
    select 4 UsrID, '2015-08-09' [Date], 140 rate
)

select CTE.UsrID,CTE.Date,CTE.rate
from CTE
inner join
    (
    select UsrID,max(Date) maxdate
    from CTE
    group by UsrID
    ) dt
on CTE.UsrID = dt.UsrID and CTE.Date = dt.maxdate
where rate < 200

无法想象你在问什么。请用示例数据和期望的结果进行说明。@JFulton:很好!因此,如果您认为它可以帮助您通过单击我答案右侧的正确符号来选择正确的答案。
with CTE as
(
    select 1 UsrID, '2015-08-01' [Date], 190 rate
    union
    select 1 UsrID, '2015-08-02' [Date], 290 rate
    union
    select 2 UsrID, '2015-08-03' [Date], 190 rate
    union
    select 3 UsrID, '2015-08-04' [Date], 390 rate
    union
    select 3 UsrID, '2015-08-07' [Date], 150 rate
    union
    select 4 UsrID, '2015-08-09' [Date], 140 rate
)

select CTE.UsrID,CTE.Date,CTE.rate
from CTE
inner join
    (
    select UsrID,max(Date) maxdate
    from CTE
    group by UsrID
    ) dt
on CTE.UsrID = dt.UsrID and CTE.Date = dt.maxdate
where rate < 200
UsrID   Date    rate
2   2015-08-03  190
3   2015-08-07  150
4   2015-08-09  140