0

以下のテーブル `users` を考えると:

+----+---------+--------+
| id | name    | office |
+----+---------+--------+
|  1 | David   |      1 |
|  2 | Roz     |      1 |
|  3 | Patrick |      2 |
|  4 | Chris   |      3 |
|  5 | Agnes   |      3 |
|  6 | Freya   |      3 |
+----+---------+--------+

特定のオフィスの最初のユーザーを選択したいのですが、複数のユーザーがいる場合にのみ、次のようにします。

  • オフィス 1 = ユーザー 1 (デビッド)
  • オフィス 2 = NULL
  • オフィス 3 = ユーザー 4 (Chris)

次のようなもの:

SET @office_id = 2;
SELECT *
  FROM `users`
WHERE `office` = @office_id AND number-of-users-for-office > 1
ORDER BY `id` ASC
LIMIT 1;
4

3 に答える 3

0

後世のために書き留めている別の解決策を思いつきました。

-- Office id...
SET @office_id = 1;
-- Find the latest user
SELECT `id` INTO @latest_user_id
    FROM `users`
    WHERE `office` = @office_id
    ORDER BY `id` DESC
LIMIT 1;
-- Find the first user that isn't the first
SELECT `id` INTO @latest_user_id
    FROM `users`
    WHERE `office` = @office_id AND `id` != @latest_user_id
    ORDER BY `id` ASC
LIMIT 1;

SQL フィドルのデモ

これは最新のものを選択し、次に最新のものと同じでない最初のものを選択しようとします。したがって、行が 1 つしかない場合は、必要に応じて NULL を取得します。

于 2013-09-27T14:04:19.597 に答える