Mysql 在集的两行中的第二行中查找与sthg匹配的记录

Mysql 在集的两行中的第二行中查找与sthg匹配的记录,mysql,sql,Mysql,Sql,我有一个单词部分的数据库,每个单词有两行。所以基本上每个单词有一个两行的数据集。我想找到以元音结尾的单词(以便以后删除它们)。下面是一个示例行: ID wordID Segment SegType 2475 1170 d consonant 2476 1170 i vowel 2477 1171 a vowel 2578 1171 d consonant 前两个是一个错误的数据集(Wo

我有一个单词部分的数据库,每个单词有两行。所以基本上每个单词有一个两行的数据集。我想找到以元音结尾的单词(以便以后删除它们)。下面是一个示例行:

ID      wordID  Segment SegType

2475    1170    d       consonant
2476    1170    i       vowel
2477    1171    a       vowel
2578    1171    d       consonant
前两个是一个错误的数据集(WordID1170)——我希望找到这些数据集,然后删除它们。最后两个是一个很好的数据集(WordID1171),我想保留它们。要做到这一点,最简单的方法是获取
wordID
s的列表,然后使用它们删除坏集


那么,如何为每个以元音结尾的集合选择wordID(也就是说,集合的两行中的第二行的值为
元音
)?第二部分的
ID
总是高于第一部分,但不是可靠的奇数或偶数(我已经尝试过使用它的查询)

如果我理解正确,您可以使用
分组方式
拥有

select wordId
from t
group by wordId
having max(case when segtype = 'vowel' then id end) = max(id)

having
子句为每个wordId
查找带有元音段的行的
id
,并为每个
wordId
查找最大的
id
。如果这些ID相同,则结果集中会出现一个
wordId`。

请尝试以下查询:

SELECT a.wordID 
FROM words a JOIN words b ON a.wordID = b.wordID
WHERE a.ID > b.ID and a.segType = 'vowel';

这基本上在
wordID
列上执行
SELF-JOIN
,并返回所有值高于其连接对应项且“元音”为segType的ID。

w2查询-此查询通过对wordID分组返回每个数据集的最后一个值

w2与wordID上的原始表w1(words)连接,并根据根据上述w2查询计算的最后一个值进行过滤

SELECT w1.* 
  FROM words w1
 INNER JOIN 
(
SELECT wordID,LAST_VALUE(SegType) OVER( PARTITION BY wordID ORDER BY id ) AS lv
  FROM words
GROUP BY wordID
) w2
ON w1.wordID = w2.wordID
WHERE w2.lv = 'vowel';

前两个是坏方法。。你说的是1170吗?是的,我已经澄清了我的问题。你想消除重复吗?“坏”字ID的定义是什么?检查我发布的解决方案……以元音结尾的坏字(具有相同字ID的两行中的第二行有SegType=“vouel”)