我有一個由列ID(鍵),符號,方向,範圍,價格,百分比組成的表。我想刪除符號,方向,價格和百分比都相同,並且範圍最低的數據。我怎麼做到這一點?在Access中刪除SQL中的重複項
我一直試圖改變這種說法:DELETE FROM aw WHERE id not in (select min(id) from aw group by symbol, direction, price, percent);
得到的東西工作。
我有一個由列ID(鍵),符號,方向,範圍,價格,百分比組成的表。我想刪除符號,方向,價格和百分比都相同,並且範圍最低的數據。我怎麼做到這一點?在Access中刪除SQL中的重複項
我一直試圖改變這種說法:DELETE FROM aw WHERE id not in (select min(id) from aw group by symbol, direction, price, percent);
得到的東西工作。
下面是AW表的樣本數據。根據您的描述,我想你想用的2 ID
值,3丟棄行,和5
ID symbol direction range price percent
1 a x 15 10 5
2 a x 20 10 5
3 b y 40 50 5
4 b y 10 50 5
5 a x 15 10 5
確定的symbol
,direction
,price
每個組合的最小範圍值,並percent
。
qryMinRanges:
SELECT
aw.symbol,
aw.direction,
aw.price,
aw.[percent],
Min(aw.range) AS MinOfrange
FROM aw
GROUP BY
aw.symbol,
aw.direction,
aw.price,
aw.[percent];
...這使得這個結果集:
symbol direction price percent MinOfrange
a x 10 5 15
b y 50 5 10
確定爲每個最小範圍的最低ID
。
qryMinID_forMinRanges:
SELECT
q.symbol,
q.direction,
q.price,
q.[percent],
q.MinOfrange,
Min(aw.ID) AS MinOfID
FROM
qryMinRanges AS q
INNER JOIN aw
ON
(q.MinOfrange = aw.range)
AND (q.[percent] = aw.[percent])
AND (q.price = aw.price)
AND (q.direction = aw.direction)
AND (q.symbol = aw.symbol)
GROUP BY
q.symbol,
q.direction,
q.price,
q.[percent],
q.MinOfrange;
...這使得這個結果集:
symbol direction price percent MinOfrange MinOfID
a x 10 5 15 1
b y 50 5 10 4
所以qryMinID_forMinRanges應該代表你想保留的行。最終,您將刪除aw的行,其ID值未包含在qryMinID_forMinRanges中。但首先嚐試使用SELECT
查詢來確認您的目標是正確的刪除記錄。
SELECT
aw.ID,
aw.symbol,
aw.direction,
aw.range,
aw.price,
aw.[percent]
FROM aw
WHERE aw.ID Not In
(SELECT MinOfID FROM qryMinID_forMinRanges);
......這給了我這樣的結果集:
ID symbol direction range price percent
2 a x 20 10 5
3 b y 40 50 5
5 a x 15 10 5
所以,如果看起來正確,將其更改爲刪除查詢。
DELETE *
FROM aw
WHERE
(((aw.ID) Not In
(SELECT MinOfID FROM qryMinID_forMinRanges)));
的數據庫引擎不需要後刪除*
。但是如果你想使用查詢設計器的預覽,你需要給它一個字段規範來顯示。
請注意保護您的數據,以防萬一我搞砸了任何細節。備份很好。 :-)
嘗試使用exists
子句:
DELETE FROM aw
WHERE
exists (
select
1
from
(select symbol, direction, price, percent, min(range) as minrange from aw
group by symbol, direction, price, percent) aw2
where
aw2.symbol = aw.symbol
and aw2.direction = aw.direction
and aw2.price = aw.price
and aw2.percent = aw.percent
and aw2.minrange = aw.range
)
我不清楚你的第一段。這是否意味着您只想爲符號,方向,價格和百分比的每個組合保留一行...並且該行應該是該字段組合中具有最低範圍值的第一行? – HansUp 2012-01-11 17:06:25
@HansUp這正是我想要的 – Mike 2012-01-11 17:11:39