2017-07-07 72 views
2

我想查找組中具有最新日期的行。但是,如果該行具有在特定列中的某些特定的值,那麼我們就必須消除該行完全 對於實例如下表所示:查找帶有特定值的最新記錄

ID FK_ID DateTiME  Value 
    1  1  2017-06-01 a 
    2  1  2017-06-02 a 
    3  2  2017-06-04 b 
    4  2  2017-06-03 a 
    5  2  2017-06-01 b 
    6  3  2017-01-01 c 
    7  3  2017-01-01 a 

在這裏我要輸出作爲

FK_ID DateTime 
    1 2017-06-02 
    3 2017-01-01 

我想以FK_ID進行分組,然後希望集團的Max DateTime值。但是,如果所選的組的行具有Valueb那麼我們應該完全跳過該行並且不希望它在輸出中。

對於實施例,在上表中(1),具有最大的日期時間的行FK_ID 2是

3  2  2017-06-04 b 

然而,作爲該行的值是b,我們不希望它在輸出。

回答

3

使用ROW_NUMBER

With CTE as 
(
select t1.*, row_number() over (partition by FK_ID order by datetime desc) rn 
from MyTable t1 
) 
select * 
from CTE 
where rn = 1 
and value <> 'b' 
+1

我認爲是正確的答案了所有3個假設+1:d –

+1

不,這是行不通的。因爲有可能一行的value = b得到'rn = 1'。對於那個組,你不會得到結果。相反,您必須過濾cte中的值。 **編輯**也許我誤解了要求,如果我看看預期的結果。 OP不想跳過值爲b的_row_,但是整個組。 +1 –

+1

作品完美! +1 –

2

這裏有一種方法來此

select top 1 with ties * 
from yourtable a 
where not exists(select 1 from yourtable b where a.FK_ID =b.FK_ID and b.Value = 'b') 
order by row_number()over(partition by FK_ID order by [DateTiME] desc)