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

Posted

技术标签:

【中文标题】查找具有特定值的最新记录【英文标题】:Find Latest Record With Specific Values 【发布时间】:2017-07-07 14:38:27 【问题描述】:

我想在组中找到日期最新的行。但是,如果该行在特定列中具有特定值,那么我们必须完全消除该行 对于下表中的 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)中,Max DateTime for FK_ID2的行是

  3     2     2017-06-04    b

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

【问题讨论】:

【参考方案1】:

使用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'

【讨论】:

我认为是所有 3 个假设 +1 中的正确答案:D 不,这不起作用。因为有可能一行得到rn=1 的值=b。对于该组,您不会得到结果。相反,您必须过滤 cte 中的值。 编辑 如果我查看预期结果,也许我误解了要求。 OP 不想跳过 value=b 的 row 而是整个组。 +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)

【讨论】:

以上是关于查找具有特定值的最新记录的主要内容,如果未能解决你的问题,请参考以下文章

Ext JS:如何在具有多个列值的网格中查找记录

TSQL查找组中的所有记录是不是具有相同的值

如何设置子查询以获取具有最新日期和最大 ID 的单个记录?

以准确的 MAX 顺序获取特定时间戳之间具有 MAX 值的记录

MySQL查找具有相同customerid且具有两个不同值的记录

排除 Qubole 中具有特定值的记录