![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запрос списка уволенных [D7, FireBird]
worldmen © (2011-04-02 20:09:00)есть Таблица трудовой
ID- (ключ FK )
Date_IN- (дата приема на работу)
Date_out- (дата увольнения)
В таблице хранятся данные всей трудовой, поэтому на каждого человека приходится несколько записей даты приема и даты увольнения.
Если человек еще работает, то одна из записей Date_out для него равна Null, а если его уволили то все даты Date_out заполнены.
Вопрос: как нужно выбрать список только уволенных?
пробовал по максимальной дате Date_out, но сюда попадают и еще работающие.
Виталий Панасенко (2011-04-04 14:04:00) [1]ну, это не суть.. впрочем, аналог
> sniknik © (02.04.11 22:29) [5]
только увидел :-)
Кщд (2011-04-04 13:49:00) [2]>Виталий Панасенко (04.04.11 12:44) [12]
distinct, т.к. записей м.б. > 1
Виталий Панасенко (2011-04-04 12:44:00) [3]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 _ это ИД работника?
!!! (2011-04-04 10:05:00) [4]Удалено модератором
Кщд (2011-04-04 07:10:00) [5]>!!! (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 - таблица работников
sniknik (2011-04-03 01:03:00) [6]> но дата увольнения всеравно нужна.
какой в ней смысл? сделать признак (операция) с одной датой. идентификатор работника само собой оставить + добавить искусственный ключ операции, автоикремент (полезно для разных "адресных"/позаписьных ссылок в запросах)
признак может быть не только "уволен", а еще и принят/переведен/повышен/т.д. ("на вырост").
Anatoly Podgoretsky (2011-04-03 00:48:00) [7]> clickmaker (03.04.2011 00:30:06) [6]
Излишество, дублирует дату уволнения.
worldmen (2011-04-03 00:37:00) [8]> а не проще признак ввести "уволен"?
Можно, но дата увольнения всеравно нужна.
clickmaker (2011-04-03 00:30:00) [9]а не проще признак ввести "уволен"?
sniknik (2011-04-02 22:29:00) [10]тогда уж попроще
Select DISTINCT ID From People
WHERE ID NOT IN (Select ID From People Where Date_Out is null)
worldmen (2011-04-02 21:28:00) [11]Интересное решение, но работает !!!!
!!! (2011-04-02 20:54:00) [12]
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
sniknik (2011-04-02 20:39:00) [13]> Это как "еще работающие", и при этом Date_out <> NULL
старая запись c Date_out <> NULL, новая = NULL.
условие по только одной записи "кривое".
выбирать нужно по максимальной Date_IN с проверкой на <> NULL у Date_out.
Anatoly Podgoretsky (2011-04-02 20:26:00) [14]Это как "еще работающие", и при этом Date_out <> NULL
Смешно