-
есть Таблица трудовой
ID - (ключ FK )
Date_IN - (дата приема на работу)
Date_out - (дата увольнения)
В таблице хранятся данные всей трудовой, поэтому на каждого человека приходится несколько записей даты приема и даты увольнения.
Если человек еще работает, то одна из записей Date_out для него равна Null, а если его уволили то все даты Date_out заполнены.
Вопрос: как нужно выбрать список только уволенных?
пробовал по максимальной дате Date_out, но сюда попадают и еще работающие.
-
Это как "еще работающие", и при этом Date_out <> NULL
Смешно
-
> Это как "еще работающие", и при этом Date_out <> NULL
старая запись c Date_out <> NULL, новая = NULL.
условие по только одной записи "кривое".
выбирать нужно по максимальной Date_IN с проверкой на <> NULL у Date_out.
-
Select B.ID
From
(Select ID, Count(ID) CountNull
From People
Where Date_Out is not null
Group By ID) A,
(Select ID, Count(ID) CountNotNull
From People
Group ID) B
Where B.ID = A.ID And B.CountNotNull = A.CountNull
-
Интересное решение, но работает !!!!
-
тогда уж попроще
Select DISTINCT ID From People
WHERE ID NOT IN (Select ID From People Where Date_Out is null)
-
а не проще признак ввести "уволен"?
-
> а не проще признак ввести "уволен"?
Можно, но дата увольнения всеравно нужна.
-
> clickmaker (03.04.2011 00:30:06) [6]
Излишество, дублирует дату уволнения.
-
> но дата увольнения всеравно нужна.
какой в ней смысл? сделать признак (операция) с одной датой. идентификатор работника само собой оставить + добавить искусственный ключ операции, автоикремент (полезно для разных "адресных"/позаписьных ссылок в запросах)
признак может быть не только "уволен", а еще и принят/переведен/повышен/т.д. ("на вырост").
-
>!!! (02.04.11 20:54) [3]
"иногда лучше жевать" (с) :)
см. sniknik © (02.04.11 22:29) [5]
или
select j.id
from employee j
where not exists (
select null
from record p2
where p2.id = j.id
and p2.date_out is null
)
, где employee - таблица работников
-
Удалено модератором
-
select * from table1 t1 where not exists
(select t2.date_out from table1 t2 where t1.id=t2.id and t2.date_out is null)
не оно?
я так понимаю, ID _ это ИД работника?
-
>Виталий Панасенко (04.04.11 12:44) [12]
distinct, т.к. записей м.б. > 1
-
ну, это не суть.. впрочем, аналог
> sniknik © (02.04.11 22:29) [5]
только увидел :-)