Sql 按一个字段分组,保留其他字段
包含三个字段的基本表Sql 按一个字段分组,保留其他字段,sql,ms-access,group-by,aggregate,Sql,Ms Access,Group By,Aggregate,包含三个字段的基本表bod: | BOFORM_ID | FEINBOD | MAECHTBOD | +-----------+---------+-----------+ | 3301211 | fSms | 50 | | 3301211 | mSfs | 150 | | 3301231 | fSms | 200 | | 3301312 | Ss | 150 | | 3301312 | Su2
bod
:
| BOFORM_ID | FEINBOD | MAECHTBOD |
+-----------+---------+-----------+
| 3301211 | fSms | 50 |
| 3301211 | mSfs | 150 |
| 3301231 | fSms | 200 |
| 3301312 | Ss | 150 |
| 3301312 | Su2 | 50 |
我想
BOFORM\u ID
MAECHTBOD
FEINBOD
与MAECHTBOD
的最大值保持在同一行| BOFORM_ID | FEINBOD | MAECHTBOD |
+-----------+---------+-----------+
| 3301211 | mSfs | 150 |
| 3301231 | fSms | 200 |
| 3301312 | Ss | 150 |
您可以使用相关子查询:
SELECT b.*
FROM bod as b
WHERE MAECHTBOD = (SELECT MAX(b1.MAECHTBOD) FROM bod as b1 WHERE b1.BOFORM_ID = b.BOFORM_ID);
考虑将单元级数据连接到聚合查询。这种方法比关联子查询更有效,关联子查询计算每行外部查询的聚合,而不是一次,如下所示
SELECT t.BOFORM_ID, t.FEINBOD, t.MAECHTBOD
FROM myTable t
INNER JOIN (
SELECT sub_t.BOFORM_ID, MAX(sub_t.MAECHTBOD) AS MAX_BOD
FROM myTable sub_t
GROUP BY sub_t.BOFORM_ID
) AS agg
ON t.BOFORM_ID = agg.BOFORM_ID AND t.MAECHTBOD = agg.MAX_BOD
查找窗口功能(特别是分区)@约菲利普斯。。。MS Access是另一种Microsoft产品,它使用JET/ACE SQL方言而不是T-SQL。ACE不支持窗口功能。@Parfait确实支持。我一定是看错标签了