0

Max 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 
4

2 に答える 2

2
 SELECT id FROM tablename
 ORDER BY value=1 DESC, id DESC
 LIMIT 1;


 SELECT persons.personid,persons.name,othertable.id
 FROM persons
 LEFT JOIN othertable 
    ON othertable.personid = persons.personid
 LEFT JOIN othertable check
    ON check.personid = persons.personid
    ON  check.id > othertable.id
    AND (othertable.value!=1 OR check.value=1)
 WHERE check.personid IS 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;
于 2013-04-25T18:45:49.293 に答える