我在mysql中有一个包含两列的表.身份证号码.第一次列出4到13之间的所有行
SELECT * FROM table WHERE id BETWEEN 4 AND 13
现在我有一个从4到13的所有行的列表.(绿色行)
我想在这个列表中搜索,找到数字<= 10的第一行和数字<= 1000的最后一行以及中间的所有行.即我需要下图所示的橙色行:

所以,我需要这样的东西:
SELECT *
FROM TABLE
WHERE id BETWEEN 4 AND 13
AND number
START
FROM <= 10
AND END WITH <= 1000
Run Code Online (Sandbox Code Playgroud)
但显然上述情况并不正确.我怎样才能获得橙色行?
这应该适合你:
SELECT T.ID, T.Number
FROM T
INNER JOIN
( SELECT MIN(CASE WHEN Number < 10 THEN ID END) AS FirstID,
MAX(CASE WHEN Number < 1000 THEN ID END) AS LastID
FROM T
WHERE ID BETWEEN 4 AND 13
) AS ID
ON ID.FirstID <= T.ID
AND ID.LastID >= T.ID
Run Code Online (Sandbox Code Playgroud)
关键是子查询 -
SELECT MIN(CASE WHEN Number < 10 THEN ID END) AS FirstID,
MAX(CASE WHEN Number < 1000 THEN ID END) AS LastID
FROM T
WHERE ID BETWEEN 4 AND 13
Run Code Online (Sandbox Code Playgroud)
它在给定范围内获得小于10的第一个ID,并且在给定范围内获得小于1000的最后一个ID.然后使用这些ID过滤结果.