sql - 根据 group by 条件获取 id
问题描述
我正在尝试创建一个 sql 查询来合并日期相同的行。这个想法是根据最高小时数来执行此操作,以便我最终获得每个小时数最高的日期的相应 ID。我一直在尝试使用简单的 group by,但似乎不起作用,因为我不能只在id
列上放置一个聚合函数,因为它应该基于小时条件
+------+-------+--------------------------------------+
| id | date | hours |
+------+-------+--------------------------------------+
| 1 | 2012-01-01 | 37 |
| 2 | 2012-01-01 | 10 |
| 3 | 2012-01-01 | 5 |
| 4 | 2012-01-02 | 37 |
+------+-------+--------------------------------------+
期望的结果
+------+-------+--------------------------------------+
| id | date | hours |
+------+-------+--------------------------------------+
| 1 | 2012-01-01 | 37 |
| 4 | 2012-01-02 | 37 |
+------+-------+--------------------------------------+
解决方案
如果您只想要一排 - 即使有领带 - 然后使用row_number()
:
select t.*
from (select t.*, row_number() over (partition by date order by hours desc) as seqnum
from t
) t
where seqnum = 1;
具有讽刺意味的是,Postgres 和 Oracle(原始标签)都有我认为更好的方法,但它们完全不同。
Postgres:
select distinct on (date) t.*
from t
order by date, hours desc;
甲骨文:
select date, max(hours) as hours,
max(id) keep (dense_rank first over order by hours desc) as id
from t
group by date;
推荐阅读
- powershell - Windows cmd/Powershell,即使在超时期间也每秒 ping 一次
- knative - KafkaSource 到 camel-k 集成无法翻译 CloudEvent
- javascript - 如何在不截断值的情况下使用 autoNumeric 填充 lat/lng 值?
- python - ModuleNotFoundError:没有名为“winreg”的模块
- c# - 如何在并行 ForEach 循环中从数组中选择一个随机元素?
- angular - 角primeng树文件夹上下箭头不起作用
- java - 点燃 cron 中的 ClassNotFoundException
- java - sh startAgent.sh 在 MacOS 中不适用于 jmeter perfmon 插件
- c++ - 如何将 libjingle_peerconnection_so.so 链接到项目并从中调用类?
- python - 如何让 Python 尝试从本地文件夹加载模块?