Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 仅选择一个字段值最高的行,按另一个字段分组_Sql_Ms Access_Ms Access 2010 - Fatal编程技术网

Sql 仅选择一个字段值最高的行,按另一个字段分组

Sql 仅选择一个字段值最高的行,按另一个字段分组,sql,ms-access,ms-access-2010,Sql,Ms Access,Ms Access 2010,我有一个表,它的信息结构如下: ID Points Name School 1 123 James A 2 534 Henry B 3 56 Henry B 4 153 Chris B 5 95 Chris B 6 83 Chris B 7 421 James A ID Points Name School 7 421 James A 2

我有一个表,它的信息结构如下:

ID  Points  Name    School
1   123     James   A
2   534     Henry   B
3   56      Henry   B
4   153     Chris   B
5   95      Chris   B
6   83      Chris   B
7   421     James   A
ID  Points  Name    School
7   421     James   A
2   534     Henry   B
4   153     Chris   B
我需要从查询中找出具有相同名称的行,但每个行的最高点如下所示:

ID  Points  Name    School
1   123     James   A
2   534     Henry   B
3   56      Henry   B
4   153     Chris   B
5   95      Chris   B
6   83      Chris   B
7   421     James   A
ID  Points  Name    School
7   421     James   A
2   534     Henry   B
4   153     Chris   B
关于如何通过查询实现这一点,您有什么想法吗?我花了太多时间想弄明白这一点

select name,school,max(points) from table group by name,school
这将为您提供每个姓名/学校组合的最高分数。如果需要ID,请将其连接到自身:

select table.* from table inner join
(select name,school,max(points) as points from table group by name,school) a
on a.name = table.name and a.school = b.school and a.points = table.points
编辑:抱歉,这是一个SQL解决方案…刚刚看到MSACCESS标记。逻辑是正确的,但您需要转换为access语法

编辑以更正第二个查询,在my join中缺少一列

SELECT 
    (SELECT TOP 1 ID FROM Table 
    WHERE 
        Name = t.Name AND 
        School=t.School AND 
        Points=t.Points
    ) as Id, t.Name, t.Points, t.School
FROM 
    (SELECT Name, School, max(Points) as Points
    FROM Table
    GROUP BY Name, School) t
这将为您提供每个姓名/学校组合的最高分数。如果需要ID,请将其连接到自身:

select table.* from table inner join
(select name,school,max(points) as points from table group by name,school) a
on a.name = table.name and a.school = b.school and a.points = table.points
编辑:抱歉,这是一个SQL解决方案…刚刚看到MSACCESS标记。逻辑是正确的,但您需要转换为access语法

编辑以更正第二个查询,在my join中缺少一列

SELECT 
    (SELECT TOP 1 ID FROM Table 
    WHERE 
        Name = t.Name AND 
        School=t.School AND 
        Points=t.Points
    ) as Id, t.Name, t.Points, t.School
FROM 
    (SELECT Name, School, max(Points) as Points
    FROM Table
    GROUP BY Name, School) t
这将为您提供每个姓名/学校组合的最高分数。如果需要ID,请将其连接到自身:

select table.* from table inner join
(select name,school,max(points) as points from table group by name,school) a
on a.name = table.name and a.school = b.school and a.points = table.points
编辑:抱歉,这是一个SQL解决方案…刚刚看到MSACCESS标记。逻辑是正确的,但您需要转换为access语法

编辑以更正第二个查询,在my join中缺少一列

SELECT 
    (SELECT TOP 1 ID FROM Table 
    WHERE 
        Name = t.Name AND 
        School=t.School AND 
        Points=t.Points
    ) as Id, t.Name, t.Points, t.School
FROM 
    (SELECT Name, School, max(Points) as Points
    FROM Table
    GROUP BY Name, School) t
这将为您提供每个姓名/学校组合的最高分数。如果需要ID,请将其连接到自身:

select table.* from table inner join
(select name,school,max(points) as points from table group by name,school) a
on a.name = table.name and a.school = b.school and a.points = table.points
编辑:抱歉,这是一个SQL解决方案…刚刚看到MSACCESS标记。逻辑是正确的,但您需要转换为access语法


编辑以更正第二个查询,如果名称/学校/点在表上是唯一的,则my join中缺少一列将起作用,否则将给出重复项,脚本假定名称/学校/点组合是唯一的,如果不是唯一的,则将返回两条记录(两条记录都满足“max”条件)。如果名称/学校/点在表上唯一,则将起作用,否则将给出重复项,脚本假定名称/学校/点组合是唯一的,如果不是,则将返回两条记录(两条记录都满足“max”条件)。如果名称/学校/点在表上唯一,则将起作用,否则将给出重复项,脚本假定名称/学校/点组合是唯一的,否则将返回两条记录(两条记录都满足“max”条件)。如果名称/学校/点在表上是唯一的,则将工作,否则将给出重复项。脚本假定名称/学校/点组合是唯一的,如果不是,则将返回两条记录(满足“最大”条件的两条记录)。
SELECT 
    (SELECT TOP 1 ID FROM Table 
    WHERE 
        Name = t.Name AND 
        School=t.School AND 
        Points=t.Points
    ) as Id, t.Name, t.Points, t.School
FROM 
    (SELECT Name, School, max(Points) as Points
    FROM Table
    GROUP BY Name, School) t