以下语句返回:
select rowid,name,compound,COUNT(*) from qvalues where rowid in (select rowid from batchinfo where instrument='tf1')
group by rowid,name,compound
having COUNT(*)>1
rowid name compound (No column name)
19300 QC1 ETG 2
20379 QC4 ETS 2
20686 QC2 ETG 2
19402 QC1 ETG 2
23605 QC1 ETG 2
21705 QC3 ETS 2
23678 QC1 ETG 2
18480 QC2 ETG 2
..... ...... .....
我有另一个名为qvalues的表:rid name compound rt response finalConc qvalue rowid
229263 QC3 Hydromorphone 0.69 6228.00 82.53 98 4695
229264 QC3 Morphine 0.51 3168.00 119.89 99 4695
229265 QC3 Oxymorphone 0.57 2472.00 83.89 99 4695
229266 QC3 Benzoylecgonine 2.17 20439.25 85.99 95 4695
229267 QC3 Codeine 1.34 4829.00 82.85 96 4695
229268 QC3 Hydrocodone 1.58 12416.00 84.99 94 4695
229269 QC3 Oxycodone 1.47 5430.00 78.44 94 4695
229270 QC3 Buprenorphine 2.54 366.13 10.41 98 4695
229271 QC3 Mepbrobamate 2.50 1330.34 95.56 92 4695
229272 QC3 Methadone 2.68 85897.27 86.77 92 4695
我需要做的是从第一组中获取ROWID,NAME,COMPOUND的组合,并在第二组中仅保留它的第一次出现。我需要从复合中删除所有其他具有ROWID,NAME和COMPOUND组合的行。我需要保持RID最小的组合。
如果我需要澄清任何内容,请告诉我
答案 0 :(得分:0)
我在第二组上创建一个表别名,按名称,化合物分组,具有MIN(rowid),然后将其连接到第一组。
然后使用NOT IN删除不在该集合中的所有内容。
答案 1 :(得分:0)
所以你想要删除batchinfo中除了具有最小rid ...
的记录之外的所有内容delete qvalues where rid in
(select rid
from qvalues
where rowid in (select rowid from batchinfo where instrument='tf1')
except
select rid
from (select rid=min(rid)
from qvalues
where rowid in (select rowid from batchinfo where instrument='tf1')
group by rowid,name,compound) x);
count> 2不是必需的,因为在count = 1的情况下,它总是具有较小的记录。