Таблица раскладки:
CREATE TABLE t_order (id INT, custId INT, order DATE)
Я ищу команду SQL для выбора не более одной строки на заказ (клиент, которому принадлежит заказ, определяется полем с именем custId).
Я хочу выбрать ОДИН заказов клиента (неважно, какой из них, скажем, отсортированный по id), если для какой-либо строки не указана дата заказа.
Я хочу получить пустой Resultset для customerId, если уже есть запись с заданной датой заказа.
Вот пример. Для каждого клиента должен быть не более одного заказа (один без указания даты). Заказы, которые уже имеют значение даты, вообще не должны появляться.
+---------------------------------------------------------+
|id | custId | date |
+---------------------------------------------------------+
| 1 10 NULL |
| 2 11 2008-11-11 |
| 3 12 2008-10-23 |
| 4 11 NULL |
| 5 13 NULL |
| 6 13 NULL |
+---------------------------------------------------------+
|
|
| Result
\ | /
\ /
+---------------------------------------------------------+
|id | custId | date |
+---------------------------------------------------------+
| 1 10 NULL |
| |
| |
| |
| 5 13 NULL |
| |
+---------------------------------------------------------+
powered be JavE
Edit:
Я выбрал ответ Главича как правильный, потому что он обеспечивает
правильный результат со слегка измененными данными:
+---------------------------------------------------------+
|id | custId | date |
+---------------------------------------------------------+
| 1 10 NULL |
| 2 11 2008-11-11 |
| 3 12 2008-10-23 |
| 4 11 NULL |
| 5 13 NULL |
| 6 13 NULL |
| 7 11 NULL |
+---------------------------------------------------------+
Ответ Sfossen не сработает, когда клиенты появляются более двух раз из-за ограничения предложения where a.id! = B.id.
Ответ Quassnoi не работает для меня, так как я запускаю версию сервера 4.0.24, которая выдает следующую ошибку:
альтернативный текст http://img25.imageshack.us/img25/8186/picture1vyj.png