行号分区

时间:2019-02-08 13:56:49

标签: sql sql-server

我正在使用SQL Server Management Studio2012。

很抱歉您可能会误导标题,不确定该怎么称呼。

我需要锻炼如何找到仅动员了一个人的事件。我想我可以通过使用Row_Number分区然后在1上过滤

来实现此目的。
 RowNumber    Incident MobilisedDateTime     Name
    1          abc     2019-02-08            Fred
    2          abc     2019-02-08            Roger
    3          abc     2019-02-08            Brian
    4          abc     2019-02-08            John
    1          def     2019-02-08            Joe
    1          ghi     2019-02-07            Robert
    1          jkl     2019-02-06            Jimmy
    2          jkl     2019-02-06            John

这是在对第1行进行过滤时发生的事情。这不是我要的,因为事件'abc'和'jkl'的动员者不止一个。

    RowNumber Incident MobilisedDateTime     Name
    1          abc     2019-02-08            Fred
    1          def     2019-02-08            Joe
    1          ghi     2019-02-07            Robert
    1          jkl     2019-02-06            Jimmy

我想看到的结果是

    RowNumber Incident MobilisedDateTime     Name
     1          def     2019-02-08           Joe
     1          ghi     2019-02-07           Robert

2 个答案:

答案 0 :(得分:0)

最好的方法可能是my $match = $variable =~ /(*pattern*).*/ ? $1 : *defaultValue*; 。不需要窗口功能:

not exists

为了提高性能,您希望在select t.* from t where not exists (select 1 from t t2 where t2.incident = t.incident and t2.name <> t.name ); 上建立索引。

答案 1 :(得分:0)

您可以尝试此查询,这将返回您的结果

select RowNumber,Incident,MobilisedDateTime,max(Name) as name,count(distinct name) as cnt from table_name group by RowNumber,Incident,MobilisedDateTime  having(count(distinct name) = 1)