如果使用MIN()GROUP BY,我还需要向SQL查询中添加什么才能在其他列中引入相关信息



有一个表,包含以下列标题:indi_cod、ries_cod、日期、时间和级别。每个ries_cod包含一个以上的indi_cod,这些indi_cod是随机的连续数字。

如果目标是找到每个ries_cod的最小ID,同时将其相关信息与日期、时间和级别相对应,那么构建哪个SQL查询是合适的?我尝试了以下查询:

选择MIN(indi_cod(作为MIN_indi_cod来自my-project-01-354113.indi_cod.second_step按ries_cod分组按ries_cod 订购

事实上,它为我提供了每组ries_cod的最小值indi_cod,但我无法编写适当的查询来获得与每个indi_cod对应的日期、时间和级别列的信息。

我通常对这类事情使用某种排名。您可以根据rdbms使用rownumber、rank或dense_rank。这里有一个例子。

with t as(select a.*,
row_number() over (partition by ries_cod, order by indi_cod) as rn
from mytable)
select * from t where rn = 1

此外,如果您使用的是oracle,那么您可以使用keep在没有两个查询的情况下完成此操作。

https://renenyffenegger.ch/notes/development/databases/SQL/select/group-by/keep-dense_rank/index

我认为您只需要将其他列分组

SELECT MIN (indi_cod), ries_cod, date, time, level AS min_indi_cod 
FROM mytavke p 
GROUP BY ries_cod, date, time, level 
ORDER BY ries_cod

最新更新