sql - 如何有条件地为某些字段选择一行,输出中的最小最大日期
问题描述
我需要来自组(即 id)的 min(date1) max(date2) 和下面与 max(date2) 相关的其他字段
是源日期的样子
id ------ date1 ------ date2 ------ 其他数据
---------------------------------------- -----------------
1------2018 年 2 月 12 日------ 2018 年 1 月 12 日------abc
1-- ----08/21/2018-----06/12/2019------def
2------12/01/2018-----03/03/2016 ------ghi
2------12/03/2018------06/30/2020------xyz
2------01/02/2018- ------05/10/2019-----荷航
我无法使用分组依据,因为还有其他我不想分组的字段。
我的预期输出是
id---- min(date1) ----- max(date2) --other-data(关联 max(date2)
-------- -------------------------------
1 ------02/12/2018-----06 /12/2019------def
2 ------01/02/2018 ------ 06/30/2020-----xyz
解决方案
是的,您可以使用 group by,您只需对剩余的其他数据使用适当的聚合函数并使用 KEEP 聚合子句来指示要保留组中的哪条记录。这是一个演示它的SQL Fiddle :
查询 1:
select id
, min(date1)
, max(date2)
, max(other_data) keep (dense_rank last order by date2) od
from table1
group by id
结果:
| ID | MIN(DATE1) | MAX(DATE2) | OD |
|----|-----------------------|-----------------------|-----|
| 1 | 2018-02-12 00:00:00.0 | 2019-06-12 00:00:00.0 | def |
| 2 | 2018-01-02 00:00:00.0 | 2020-06-30 00:00:00.0 | xyz |
推荐阅读
- php - 在php中加密并在sql server中解密
- python - PyCharm Python - 在调试器中显示对象的 __str__ 而不是内存地址
- javascript - 将对象推送到不适用于 Javascript 反应的数组
- javascript - 使用 Javascript 保存 HTML 文件的方法
- excel - VBA重复将2张不同组合从一个主工作簿复制到新工作簿?
- android - 如何将 Android SingleLaunchActivityTestCase 转换为 ActivityTestRule?(仪器单元测试)
- c# - 从数据表中更新有界数据网格视图中的插入数据
- spring-boot - PCF 无法在应用程序中同时使用配置服务器和服务注册表
- javascript - Facebook edge.create 从 api 中删除的解决方法
- database - Neo4j 在匹配查询中多次应用关系