sql - 如果不是不同的,则选择不同的行或特定的值行
问题描述
我有一个表,如下所示,如果值 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 来获取计数,但我无法理解如何使用该计数来过滤记录。
任何帮助是极大的赞赏 :)
解决方案
您可以使用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
或其他机制来设置正确的排序顺序。
推荐阅读
- javascript - 为什么我的 fetch 在我的服务器上失败,但在本地主机上却没有?并且 array.slice 也会中断 fetch
- r - 将连续轴更改为离散轴并设置轴限制
- python - 为什么pdftotext会抛出DLL加载失败错误,在windows10,python3.7上
- html - 如何在 Ubuntu 上的 VS Code 中格式化 HTML 代码?
- ssh - 如何从需要密钥的第二个远程主机 scp 到本地计算机?
- sql - BigQuery - 从使用复杂 CTE 的查询结果创建表?
- optaplanner - 在多个对象层次结构中设置分配
- java - Kafka Consumer 升级到 Java 15 后无法可靠轮询,Producer 会首先在同一 JVM 中查找和消费最近的记录
- python - 无法模拟 subprocess.check_call
- sql-server - 加入 SQL Bridge 表