我正在使用Access。 我有以下查询;
SELECT instruments.inst , instruments.predicted, instruments.prediction
FROM instruments
INNER JOIN
(SELECT inst, MAX(prediction) AS [predictions]
FROM instruments
GROUP BY inst ) groupedtt
ON instruments.inst = groupedtt.inst
AND instruments.prediction = groupedtt.predictions
我想要做的是,如果INST的预测是相同的,我希望它只返回一条记录。目前,如果预测相同,那么它将显示所有这些记录。我想要的只是为每个显示一条记录。
我尝试过不同,但它似乎没有用,输出也是一样。
示例数据
Inst instrument prediction
16 BassSaxophone 0.9
16 B-flatclarinet 0.9
所需的输出将显示这两个记录之一,sql自动选择其中一个,而不是显示两个记录。 E.g。
Inst instrument prediction
16 BassSaxophone 0.9
答案 0 :(得分:1)
您可以这样重写您的查询:
select inst, predicted, prediction
from instruments i1
where not exists
(
select *
from instruments i2
where i2.inst = i1.inst
and i2.prediction > i1.prediction
);
即。得到所有没有相同inst的仪器且具有更大预测的仪器。
现在每个预测只能获得一条记录,我们只需扩展where子句。
select inst, predicted, prediction
from instruments i1
where not exists
(
select *
from instruments i2
where i2.inst = i1.inst
and (i2.prediction > i1.prediction or
(i2.prediction = i1.prediction and i2.instrument > i1.instrument))
);
答案 1 :(得分:0)
这是另一个答案:DISTINCT不起作用,因为记录不同。如果你想要一个结果行每 inst和预测,你分组 inst和预测。
SELECT instruments.inst , MAX(instruments.predicted), instruments.prediction
FROM instruments
INNER JOIN
(SELECT inst, MAX(prediction) AS [predictions]
FROM instruments
GROUP BY inst ) groupedtt
ON instruments.inst = groupedtt.inst
AND instruments.prediction = groupedtt.predictions
GROUP BY instruments.inst , instruments.prediction;
我更喜欢我的另一个答案: - )