sql group by 取每组一条
时间: 2023-07-30 16:05:15 浏览: 150
可以使用子查询或者窗口函数来实现。
使用子查询:
```
SELECT t.*
FROM (
SELECT col1, col2, MAX(col3) AS max_col3
FROM table_name
GROUP BY col1, col2
) AS t;
```
使用窗口函数:
```
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY col3 DESC) AS rn
FROM table_name
) AS t
WHERE rn = 1;
```
以上两种方法都可以取到每组中 col3 最大的一条记录。
相关问题
sql group by 取每组第一条
你可以使用以下SQL语句来实现group by取每组第一条的功能:
select * from (select 客户名, 时间, 其他字段, (@row_number:=case when @sortby=客户名 then @row_number+1 else 1 end) as row_number, @sortby:=客户名 as sortby from table, (select @sortby:=null, @row_number:=0) as x order by 客户名, 时间) as t where row_number=1;
这个SQL语句会对表进行分组,并按照客户名和时间进行排序。然后,它使用变量row_number来计算每组的行号,如果当前行的客户名和上一行的客户名相同,则行号递增,否则重置为1。最后,通过筛选出行号等于1的行,就可以获得每组的第一条记录。
group by 取每组更新时间最新的一条
您可以使用以下SQL查询来实现按组分组,并获取每个组中更新时间最新的一条记录:
```sql
SELECT *
FROM your_table
WHERE (group_id, update_time) IN (
SELECT group_id, MAX(update_time)
FROM your_table
GROUP BY group_id
);
```
在上述查询中,`your_table` 是您要查询的表名,`group_id` 是分组的依据列,`update_time` 是更新时间列。此查询子查询会先按组分组并获取每组中更新时间的最大值,然后通过外层查询来选择具有匹配的 `group_id` 和 `update_time` 的记录。
请根据您的实际情况替换相应的表名和列名。希望能对您有所帮助!
阅读全文