SQL Server 表A 有字段 id,a,b,c,d ,id是递增序号,按照a和b分组,并选出最大的c,找出这条数据对应的id
时间: 2023-12-10 19:40:16 浏览: 25
可以使用以下 SQL 查询语句来实现:
```sql
SELECT MAX(c) AS max_c, a, b
FROM A
GROUP BY a, b
```
这将按照a和b分组,并选出每个组中最大的c值。然后,我们可以再次使用这个查询结果来查找对应的id值:
```sql
SELECT A.id
FROM A
JOIN (
SELECT MAX(c) AS max_c, a, b
FROM A
GROUP BY a, b
) AS sub
ON A.a = sub.a AND A.b = sub.b AND A.c = sub.max_c
```
这将返回每个组中最大的c值所对应的id值。
相关问题
SQL Server 表A 有字段 id,a,b,c ,id是递增序号,按照a分组,并选出最大的b,并找到这条数据对应的id
可以使用如下的 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为空的记录,否则会影响结果的正确性。