Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MYSQL中-在列中最多选择一个特定值_Mysql_Sql - Fatal编程技术网

在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:可能有多个用户同时预订。所以不可能只在这一列上选择我选中了它。还有一些行,我不需要。而且还要努力!