|
Выборка всех неработающих людей
|
|||
---|---|---|---|
#18+
Уважаемые форумчане, добрый день. Помогите, пожалуйста, с запросом: необходимо выбрать всех уволенных людей, использование только IS NOT NULL не подходит, т.к. у человека может быть несколько сотрудников, следовательно он может попасть в выборку как уволенный, но при этом работать по другой записи. Имеется две таблицы: profile (столбцы id, name) и employees (id, profile_id, date_start, date_end) В запрос вида SELECT * FROM employees WHERE date_end IS NOT NULL попадают все записи, у которых есть дата увольнения, но как писал выше - в таблице employees у человека может быть не одна запись, и по ней человек может работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2019, 17:41 |
|
Выборка всех неработающих людей
|
|||
---|---|---|---|
#18+
Структуру (CREATE TABLE), пример наполнения с разными вариантами сочетания приёмов-увольнений (INSERT INTO) и результат на именно этих данных (тег Table, разделитель полей запятая) - сюда, или в виде fiddle. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2019, 19:44 |
|
Выборка всех неработающих людей
|
|||
---|---|---|---|
#18+
Чисто от фонаря: Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2019, 19:45 |
|
Выборка всех неработающих людей
|
|||
---|---|---|---|
#18+
Akina, доброго времени суток, запрашиваемые данные: Таблица profile create table profile ( id int(255) auto_increment primary key, name varchar(255) not null ); Таблица employees create table employees ( id int(255) auto_increment primary key, profile_id int(255) null, date_start date null, date_end date null ); Пример заполнения таблиц приложил к ответу. К примеру, человек с id=4 в таблице profile в данный момент работает, но у него также имеется запись о том, что он когда-то был уволен. По факту необходимо чтоб в выборку попал только человек с id=5, т.к. только у него на данный момент есть "активная" дата увольнения. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2019, 21:51 |
|
Выборка всех неработающих людей
|
|||
---|---|---|---|
#18+
FolkHealerПример заполнения таблиц приложил к ответу. К примеру, человек с id=4 в таблице profile в данный момент работает, но у него также имеется запись о том, что он когда-то был уволен. По факту необходимо чтоб в выборку попал только человек с id=5, т.к. только у него на данный момент есть "активная" дата увольнениТогда я угадал. См. код выше. Ну, может, ещё добавить проверку, что COUNT(date_start) > 0 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2019, 22:24 |
|
Выборка всех неработающих людей
|
|||
---|---|---|---|
#18+
Akina, либо я что-то не так записал с ваших слов, либо я некорректно описал задачу в исходном обращении... Добавил в таблицу employees записей: id profile_id date_start date_end 1 4 2019-03-01 2019-03-15 2 4 2019-03-16 3 3 2019-03-01 4 5 2019-03-01 2019-03-24 5 1 2019-03-01 2019-03-15 6 1 2019-03-18 2019-03-22 7 1 2019-03-23 2019-03-24 8 2 2019-03-01 2019-03-31 9 3 2019-03-15 При таких значениях в выдаче должны остаться люди, с id = 5, 1, 2 Сам запрос: SELECT profile_id, COUNT(date_start), COUNT(date_end) FROM employees WHERE date_end IS NOT NULL GROUP BY profile_id HAVING COUNT(date_start) = COUNT(date_end) AND COUNT(date_start) > 0 Но на выходе получается следующее: (приложил файл к сообщению) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2019, 22:45 |
|
Выборка всех неработающих людей
|
|||
---|---|---|---|
#18+
FolkHealer, пардон, не с id, а с profile_id. 4 profile_id в выборке должен отсутствовать ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2019, 22:47 |
|
Выборка всех неработающих людей
|
|||
---|---|---|---|
#18+
FolkHealer, уберите WHERE date_end IS NOT NULL ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2019, 05:08 |
|
Выборка всех неработающих людей
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2019, 07:35 |
|
Выборка всех неработающих людей
|
|||
---|---|---|---|
#18+
Впрочем, если выбирать из одной таблицы, то условие AND COUNT(date_start) > 0 избыточно: Код: sql 1. 2. 3. 4.
Это условие нужно, если мы получаем данные по профилю из таблицы профилей, причём надо отобразить все профили, включая те, что не имеют записей в employees: Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2019, 07:39 |
|
|
start [/forum/topic.php?fid=47&msg=39791211&tid=1829231]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 142ms |
0 / 0 |