sql - 需要根据某些条件获取数据
问题描述
我有一张像
id sub_id course date
1 2 art 01-jan-2019
1 2 sc 01-jan-2019
1 2 cmc 01-jan-2019
1 2 math 01-jan-2019
1 2 sc 02-jan-2019
1 2 cmc 02-jan-2019
1 3 math 01-jan-2019
1 3 art 01-jan-2019
2 2 sc 01-jan-2019
2 2 art 01-jan-2019
2 2 sc 01-jan-2019
然后我需要检查任何 id,如果 sub_id 在同一日期存在不同的记录,则应优先考虑艺术,然后是 sc,然后是 cmc,最后是数学。所以根据逻辑我应该得到数据:
id sub_id course date
1 2 art 01-jan-2019
1 2 sc 02-jan-2019
1 3 art 01-jan-2019
2 2 art 01-jan-2019
我试图为数据赋予优先级编号,但之后我无法应用逻辑
select id,sub_id,date,course,case course when art then 1
when sc then 2 when cmc then 3 else 4 end as cur_rnk from test_table;
所以根据逻辑我应该得到数据:
id sub_id course date
1 2 art 01-jan-2019
1 2 sc 02-jan-2019
1 3 art 01-jan-2019
2 2 art 01-jan-2019
解决方案
如果您的 dbms 支持,那么您可以尝试使用row_number()
select * from
(
select id,sub_id,date,course,
row_number() over(partition by id, sub_id,date order by case course when art then 1
when sc then 2 when cmc then 3 else 4 end) as rn
from test_table
)A where rn=1
推荐阅读
- typescript - Vue 3 我可以获得应用于组件的自定义指令列表吗?
- java - 我想禁用 webview 中的图像。我认为我们可以阻止加载图像的 URL,但是如何实现它
- armv8 - 存储在装配中
- c++ - 使用 mysimplebook->GetPageCount() wxWidgets 时应用程序因分段错误而崩溃
- javascript - 如何使用 Cypress 测试 Snowpack 应用程序
- firebase - Firebase 可调用云函数 CORS 错误,但 allUsers 已设置为调用者
- c# - OleDbCommand 偶尔不返回任何预期的行,没有错误消息
- azure-devops - Azure DevOps (SAAS)、自托管代理和 GitHub Enterprise Server 之间的数据流
- ios - StackView 添加了一个跨越边界约束,它弄乱了我的视图高度
- javascript - 反应:下拉菜单没有在外面的水龙头上关闭