在MYSQL中-在列中最多选择一个特定值
几个星期以来,我一直在寻找解决方案,但并没有真正解决问题:是否可以只选择几行,直到或达到某个值,这可能会在我的表中进一步重复? 我认为,举个例子非常有用:在MYSQL中-在列中最多选择一个特定值,mysql,sql,Mysql,Sql,几个星期以来,我一直在寻找解决方案,但并没有真正解决问题:是否可以只选择几行,直到或达到某个值,这可能会在我的表中进一步重复? 我认为,举个例子非常有用: Type | OBID | RECID 5 | T-000032 | 5637637 1 | T-123456 | 5637636 1 | T-789123 | 5637635 2 | T-123456 | 5637634 2 | T-789123 | 5637633 1 | T-221
Type | OBID | RECID
5 | T-000032 | 5637637
1 | T-123456 | 5637636
1 | T-789123 | 5637635
2 | T-123456 | 5637634
2 | T-789123 | 5637633
1 | T-221133 | 5637628
2 | T-221133 | 5637612
这里有一个小例子:
我表格的这一部分总是以类型5开头,然后是两行类型1。我只需要类型为1的这组特殊行,因为出现了类型为2的第一行。
我不会被任何其他类型为1的行所吸引-仅此行:
1 | T-123456 | 5637636
1 | T-789123 | 5637635
准仅此类型为1且介于
类型为5和的第一行
类型为2的第一行
我希望你能帮助我。
多谢各位
克丽丝这感觉像是一个缺口和孤岛问题,但在这种情况下,您只需要一个孤岛。一种方法是使用子查询查找: 最大RECID值,其中Type=1。这代表了 包括该岛的上界。 输入的最大RECID值=1,累犯在哪里 值也小于上述RECID值。这起到了 岛上唯一的下界。 以下是一个工作查询:
SELECT *
FROM yourTable
WHERE Type = 1 AND RECID > (SELECT MAX(RECID) FROM yourTable
WHERE Type <> 1 AND RECID < (SELECT MAX(RECID) FROM yourTable
WHERE Type = 1)) AND
RECID <= (SELECT MAX(RECID) FROM yourTable WHERE Type = 1)
ORDER BY
RECID DESC;
对于低于8.0的mysql版本,您可以在下面进行尝试
select * from
(SELECT
@row_number:=CASE
WHEN @Type = PType THEN @row_number + 1
ELSE 1
END AS num,
@Type:=Type as PType,
Type,
OBID,RECID
FROM
tablename order by type,RECID desc
)X where num in (1,2)
在mysql版本8.0的情况下,也可以使用行号+
select * from
(
select *, row_number() over(partition by type order by recid desc) as rn
from tablename
)X where rn in (1,2)
您使用的是什么版本的MySQL?一般来说,这是一个缺口和孤岛问题。表没有顺序,因此您需要找到一个比后面的更好的标准。RECID列是否升序?它是否为以后提供了该顺序?@Corion:我想使用的原始表为每个响应创建一行,其中包含降序的RECID信息。@Corion:可能有多个用户同时预订。所以不可能只在这一列上选择我选中了它。还有一些行,我不需要。而且还要努力!