Готовим старую головоломку
Joe Celko, Cooking an old puzzle
Я только что получил письмо о головоломке №11 из моей старой книги «SQL PUZZLES & ANSWER» от Райнера Гемуллы из Дрезденского технического университета, факультет информатики, институт SyA, Дрезден, Германия. Это очень изящное решение, и стыдно смотреть, насколько без нужды сложными были другие ответы:
ГОЛОВОЛОМКА С РАБОЧИМ НАРЯДОМ
Сенк Эрсой задал этот вопрос на форуме Gupta в CompuServe. У него есть таблица, которая выглядит так. На заводе проект описывается в рабочем наряде, который должен пройти через серию этапов. Этап в рабочем наряде либо завершён, либо ожидает завершения одного или нескольких предшествующих этапов. Его таблица выглядит следующим образом:
CREATE TABLE Projects (
workorder CHAR(5) NOT NULL,
step INTEGER NOT NULL CHECK (step BETWEEN 0 AND 1000),
status CHAR(1) NOT NULL CHECK (status IN ('Completed', 'Waiting')),
PRIMARY KEY (workorder, step)
);С примерными данными, такими как:
Projects
workorder step status
=================================
'AA100' 0 'Completed'
'AA100' 1 'Waiting'
'AA100' 2 'Waiting'
'AA200' 0 'Waiting'
'AA200' 1 'Waiting'
'AA300' 0 'Completed'
'AA300' 1 'Completed'Он хотел бы получить рабочие наряды, где этап равен нулю и статус «Completed», но все другие этапы для этого рабочего наряда имеют статус «Waiting». Например, в примере данных запрос должен вернуть только «AA100».
Продолжить чтение "Готовим старую головоломку"
