首页 > 解决方案 > 如果不是不同的,则选择不同的行或特定的值行

问题描述

我有一个表,如下所示,如果值 b 不存在,则我想通过 id 获取值为 b 的记录,然后值为 b。我在表中有一个关联的日期卷,我可以通过它使用按日期排序。

我试图从手机上发布屏幕图像,但附加失败。也无法发布我尝试过的 sql,因为这里正式不允许。

我试图解释这个问题如下

Persid.      Value.    Date
1                 a
1                 a
1                 a
2                 b
2                 a
2                 a

预期结果

1           a.       Latest date
2           b        any date

我尝试在 id 和 value 列上使用 group by 来获取计数,但我无法理解如何使用该计数来过滤记录。

任何帮助是极大的赞赏 :)

标签: sqloraclejoinoracle11g

解决方案


您可以使用row_number()

select id, value, date
from (select t.*,
             row_number() over (partition by persid
                                order by value desc, date desc
                               ) as seqnum
      from t
     ) t
where seqnum = 1;

这将获取任何值的最新日期。请注意,value desc“b”出现在“a”之前。如果您的值没有按字母顺序排列,那么您可以使用一种case或其他机制来设置正确的排序顺序。


推荐阅读