SQL Server 表A 有字段 id,a,b,c ,id是递增序号,按照a分组,并选出最大的b,并找到这条数据对应的id
时间: 2023-08-16 11:07:31 浏览: 161
可以使用如下的 SQL 语句实现:
```sql
SELECT MAX(b) AS max_b, MAX(id) AS id
FROM A
GROUP BY a;
```
这个语句会先按照 a 字段分组,然后在每个分组中找到最大的 b 值和对应的 id 值。注意,这里用到了 MAX() 聚合函数,它会返回指定列中的最大值。
相关问题
SQL Server 表A 有字段 id,a,b,c,d ,id是递增序号,按照a和b分组,并选出最大的c,同时通过id显示最大c值对应的d,d不相同
可以使用子查询和窗口函数来解决这个问题:
```
SELECT id, a, b, c, d
FROM (
SELECT id, a, b, c, d, ROW_NUMBER() OVER (PARTITION BY a, b ORDER BY c DESC, id ASC) AS rn
FROM A
) sub
WHERE rn = 1 AND c IS NOT NULL AND d NOT IN (
SELECT d
FROM (
SELECT a, b, MAX(c) AS max_c
FROM A
GROUP BY a, b
) sub
JOIN A ON A.a = sub.a AND A.b = sub.b AND A.c = sub.max_c
GROUP BY d
HAVING COUNT(*) > 1
)
```
这里先将表A按照a和b分组,并计算出每个分组内最大的c值以及对应的id和d。然后将这个结果作为子查询,并在外层查询中筛选出最大的c值对应的记录,同时排除掉d重复的记录。注意要先排除掉c为空的记录,否则会影响结果的正确性。
SQL Server 表A 有字段 id,a,b,c ,id是递增序号,按照a分组,然后在每个分组中,如果存在b=A,则显示A,如果存在b=T,则显示T,再找到这条数据对应的 id 值
可以使用如下 SQL 语句实现:
```
SELECT MIN(id) AS id, a,
CASE WHEN COUNT(CASE WHEN b = 'A' THEN 1 END) > 0 THEN 'A'
WHEN COUNT(CASE WHEN b = 'T' THEN 1 END) > 0 THEN 'T'
ELSE NULL END AS b
FROM A
GROUP BY a
```
首先按照字段 a 进行分组,然后使用 CASE 表达式判断每个分组中是否存在 b=A 或 b=T,如果存在则显示对应的值,否则显示 NULL。最后用聚合函数 MIN() 获取每个分组中的最小 id 值。
阅读全文