查找具有特定值的最新记录

时间:2017-07-07 14:38:27

标签: sql sql-server tsql

我想在组中找到包含最新日期的行。但是,如果该行在特定列中具有某个特定值,那么我们必须完全消除该行 对于下表中的Ex:

 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上分组,然后想要群组中的最大DateTime值。但是,如果组中选定的行Valueb,那么我们应该完全跳过该行,并且不希望它出现在输出中。

例如,在上表(1)中,FK_ID 2的Max DateTime行是

  3     2     2017-06-04    b

但是,由于此行的值为b,我们不希望它在输出中。

2 个答案:

答案 0 :(得分: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 :(得分: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)