DB2, как найти двух пользователей, которые активны в одну и ту же дату
Я пытаюсь найти двух пользователей, которые были активны в одну и ту же дату, я запускаю код
select place,date,user, artNumber
from jobs
where user in (
select user2
from userActive
where date between 20180101 and 20181011 and user2 = 'nightJob')
Это только дает мне, когда nightJob был активен, как я могу сопоставить результат так, чтобы другой пользователь был активен в то же время, что и nightJob, я хотел бы получить объяснение sulotion, потому что я пытаюсь учиться.
Я звучу как amatur и mabye I, но кто-то может объяснить мой код, я бы его написал, но я просто хочу проверить, правильно ли я его понимаю. Я не хочу фиксированных результатов, это более ста пользователей, но nightJob всегда это конкретное имя пользователя.
2 ответа
Попробуй ниже
select place,date,user, artNumber
from jobs
where user in (
select user2
from userActive where jobs.user=userActive.user2 and
date between 20180101 and 20181011 and user2 = 'nightJob')
Мое решение добавит еще два поля к выводу, и я позволю вам выполнить команду SQL. Я работаю в Oracle, а не в DB2, но, думаю, я могу помочь. Во-первых, предполагая, что ваше поле даты определяет значения даты для секунды, вам нужно использовать функцию для изменения даты: to_char(date, 'YYYYMMDD'). Кроме того, вы хотите, чтобы два (или более) пользователя работали одновременно, поэтому я включаю второго пользователя в вывод. Кроме того, мои результаты покажут, что даты из двух таблиц совпадают. Мой запрос может вернуть дубликаты. Проверьте результаты и при необходимости измените запрос.
Select jobs.place, to_char(jobs.date, 'YYYYMMDD'), jobs.user, jobs.artNumber,
UserActive.user2, to_char(UserActive.date, 'YYYYMMDD')
from jobs
join UserActive
on (to_char(jobs.date, 'YYYYMMDD'), to_char(UserActive.date, 'YYYYMMDD')
where jobs.user <> UserActive.user2
and /* put more filters here, if desired */
;