MySQL获取结果的最大ID,除非列中的值等于1

MySQL获取结果的最大ID,除非列中的值等于1,mysql,Mysql,我知道如何获取最大ID。这很简单。但我有一种情况,MaxID可以是值为1的行。例子。。我有以下表格: CREATE TEMPORARY TABLE people ( id INT NOT NULL ,NAME VARCHAR(50) NOT NULL ); INSERT INTO people (id, NAME) VALUES (1, 'tony'); INSERT INTO people (id, NAME) VALUES (2, 'dave'); INSERT I

我知道如何获取最大ID。这很简单。但我有一种情况,MaxID可以是值为1的行。例子。。我有以下表格:

    CREATE TEMPORARY TABLE people (
    id INT NOT NULL
    ,NAME VARCHAR(50) NOT NULL
);

INSERT INTO people (id, NAME) VALUES (1, 'tony');
INSERT INTO people (id, NAME) VALUES (2, 'dave');
INSERT INTO people (id, NAME) VALUES (3, 'dan');

CREATE TEMPORARY TABLE orders (
    id INT NOT NULL
    ,peopleid INT NOT NULL
    ,VALUE INT
);

INSERT INTO orders (id, peopleid, VALUE) VALUES (1, 1, NULL);
INSERT INTO orders (id, peopleid, VALUE) VALUES (2, 1, 1);
INSERT INTO orders (id, peopleid, VALUE) VALUES (3, 1, NULL);
INSERT INTO orders (id, peopleid, VALUE) VALUES (4, 2, NULL);
INSERT INTO orders (id, peopleid, VALUE) VALUES (5, 2, NULL);
INSERT INTO orders (id, peopleid, VALUE) VALUES (6, 2, NULL);
INSERT INTO orders (id, peopleid, VALUE) VALUES (7, 2, NULL);
INSERT INTO orders (id, peopleid, VALUE) VALUES (8, 1, NULL);
INSERT INTO orders (id, peopleid, VALUE) VALUES (9, 2, NULL);
当我运行查询时:

SELECT * FROM people AS p
    LEFT JOIN orders AS o ON o.peopleid = p.id
我得到的结果是:

id  name  id  peopleid  value
1   tony  1   1         null
1   tony  2   1         1
1   tony  3   1         null
1   tony  8   1         null
2   dave  4   2         null
2   dave  5   2         null
2   dave  6   2         null
2   dave  7   2         null
2   dave  9   2         null
3   dan   null null     null 
我需要结果

id  name  id  peopleid  value
1   tony  2   1         1
2   dave  9   2         null
3   dan   null null     null 
最终:

SELECT people.id,people.NAME,orders.id,orders.VALUE
FROM people
LEFT JOIN orders 
  ON orders.peopleid = people.id
LEFT JOIN orders checkbigger
  ON  checkbigger.peopleid = people.id
  AND (
    (
      checkbigger.id > orders.id
      AND orders.value <=> checkbigger.value
    )
    OR
    (
      orders.value IS NULL AND checkbigger.value IS NOT NULL
    )
  )
WHERE checkbigger.id IS NULL;
选择people.id、people.NAME、orders.id、orders.VALUE
来自人们
左连接命令
ON orders.peopleid=people.id
左连接命令检查更大
在checkbiger.peopleid=people.id上
及(
(
选中biger.id>orders.id
和订单。价值检查更大。价值
)
或
(
orders.value为NULL,checkbiger.value不为NULL
)
)
其中checkbiger.id为空;
最终:

SELECT people.id,people.NAME,orders.id,orders.VALUE
FROM people
LEFT JOIN orders 
  ON orders.peopleid = people.id
LEFT JOIN orders checkbigger
  ON  checkbigger.peopleid = people.id
  AND (
    (
      checkbigger.id > orders.id
      AND orders.value <=> checkbigger.value
    )
    OR
    (
      orders.value IS NULL AND checkbigger.value IS NOT NULL
    )
  )
WHERE checkbigger.id IS NULL;
选择people.id、people.NAME、orders.id、orders.VALUE
来自人们
左连接命令
ON orders.peopleid=people.id
左连接命令检查更大
在checkbiger.peopleid=people.id上
及(
(
选中biger.id>orders.id
和订单。价值检查更大。价值
)
或
(
orders.value为NULL,checkbiger.value不为NULL
)
)
其中checkbiger.id为空;

这将在不使用
限制的情况下工作。如果没有
value=1
行,第一个
MAX
将为空,因此
合并
返回第二个
MAX
。如果有
value=1
行,则第一个
MAX
将非空,因此返回

SELECT
  COALESCE(
    MAX(CASE WHEN value = 1 THEN id END),
    MAX(CASE WHEN value IS NULL THEN id END))
FROM a

这将在不使用
限制的情况下工作。如果没有
value=1
行,第一个
MAX
将为空,因此
合并
返回第二个
MAX
。如果有
value=1
行,则第一个
MAX
将非空,因此返回

SELECT
  COALESCE(
    MAX(CASE WHEN value = 1 THEN id END),
    MAX(CASE WHEN value IS NULL THEN id END))
FROM a

我将此表用作联接,因此我无法执行限制1。将实际查询添加到您的问题中,然后我们将查看是否可以在联接中获得它,或者是否需要子查询。好的。。我用两个表格更新了问题。。我会提出这个问题。。但这是错误的。。很明显我为什么要添加这个问题。。哈哈,即使是一个错误的查询也很可能清楚地表明了意图。我拼凑了一些(未经测试的!)查询,这些查询可能会满足您的要求。好吧。。我已经添加了表和一个非常基本的查询。你的例子对我不起作用,因为它需要是一个完全的左连接。。很抱歉,一开始没有发布此内容。我将此表用作联接,因此我无法执行限制1。然后将您的实际查询添加到您的问题中,我们将查看是否可以在联接中获得它,或者是否需要子查询。好的。。我用两个表格更新了问题。。我会提出这个问题。。但这是错误的。。很明显我为什么要添加这个问题。。哈哈,即使是一个错误的查询也很可能清楚地表明了意图。我拼凑了一些(未经测试的!)查询,这些查询可能会满足您的要求。好吧。。我已经添加了表和一个非常基本的查询。你的例子对我不起作用,因为它需要是一个完全的左连接。。很抱歉,一开始我没有发布这个。。