查找具有特定值的最新记录
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
值。但是,如果组的选定行具有 Value
和 b
,那么我们应该完全跳过该行并且不希望它出现在输出中。
例如上表(1)中,Max DateTime for FK_ID
2的行是
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)
【讨论】:
以上是关于查找具有特定值的最新记录的主要内容,如果未能解决你的问题,请参考以下文章
以准确的 MAX 顺序获取特定时间戳之间具有 MAX 值的记录