Запрос выбора в таблице выбора соединения и где, если условие - PullRequest
0 голосов
/ 07 сентября 2018

У меня 2 табличных отношения.

Это таблица сотрудников:

"id"    "nik"        "namalengkap"  "tgl_join"  "resign_date"
"1" "1802012637"    "Agung"         "2013-02-18"    NULL
"2" "1801012633"    "Karyawan"      "2017-07-12"    "2018-08-06"
"3" "1804232684"    "Test Data"     "2018-08-21"    NULL

Это таблица данных о сотрудниках:

"id"    "nik"   "tgl_awal"  "tgl_akhir" "level_id"  "jabatan_id"    "departemen_id" "divisi_id" "direktorat_id" "publish"
"1" "1802012637"    "2017-05-12"    "2017-09-12"    "1" "[""3"",""4""]" "1" "2" "1" "1"
"2" "1802012637"    "2018-06-12"    "2018-07-12"    "2" "[4,2]" "1" "9" "3" "1"
"3" "1801012633"    "2018-07-26"    \N  "2" "[3,2]" "1" "11"    "3" "1"
"4" "1801012633"    "2018-09-10"    "2018-07-21"    "6" "[4]"   "1" "3" "1" "0"
"5" "1804232684"    "2018-07-21"    "2018-08-21"    "10"    "[4]"   "1" "2" "1" "1"

Я хочу показать данные d, nik, nama, lngkap, jabatan, level, departemen, divisi, активных в июле 2018 года

Используя это условие: Состояние в таблице сотрудников:

  • join_date меньше или равен 7-му месяцу 2018 года И
  • resign_date равно NULL или resign_date больше 7-го месяца 2018 года

Условие в таблице значений employee_history:

  • публикация равна 1
  • tgl_awal меньше 7-го месяца 2018 года
  • если между ними есть повторяющиеся данные в результатах, то должны отображаться самые последние дублированные данные.

Как мне получить запрос?

Кто-нибудь может мне помочь? Спасибо

Я попробую этот запрос

SELECT a.*, b.nik, b.namalengkap,b.tgl_join, b.resign_date 
FROM employee_historypositions a
LEFT OUTER
JOIN 
employees b ON a.nik = b.nik
WHERE EXTRACT(YEAR_MONTH
FROM b.tgl_join) <= CONCAT("2018","07") AND b.resign_date IS NULL OR EXTRACT(YEAR_MONTH
FROM b.resign_date) > CONCAT("2018","07")

вы можете проверить здесь http://sqlfiddle.com/#!9/700c31/1

но данные показывают все в employee_historypositions. я просто не хочу показывать данные с таким условием.

  1. публикация равна 1
  2. tgl_awal меньше 7 месяцев 2018
  3. если между данными, которые появляются, есть 2 дубликата данных, то должны отображаться самые последние данные.

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

join_date меньше, чем 7 месяц 2018 года

`tgl_join` < '2018-07-01'

resign_date равно NULL или resign_date более 7 месяцев 2018

`resign_date` IS NULL OR `resign_date` > '2018-07-01'

Публикация равна 1

`publish` = 1

* tgl_awal менее 7 месяцев 2018 *

`tgl_awal` < '2018-07-01'

если между данными, которые появляются, есть 2 дубликата данных, то должны отображаться последние данные, дублированные.

SELECT DISTINCT ...

Итак, ваш запрос может выглядеть так:

--replace the ... by the fields you need.
SELECT DISTINCT emp.id, emp.nik, hist.jabatan_id ...
FROM `employees` emp
JOIN `employee_historypositions` hist
    ON `emp`.`nik` = `hist`.`nik`
WHERE (`emp`.`tgl_join` < '2018-07-01'
        AND (`emp`.`resign_date` IS NULL OR `emp`.`resign_date` > '2018-07-01')
        AND `hist`.`publish` = 1
        AND `hist`.`tgl_awal` < '2018-07-01')
0 голосов
/ 07 сентября 2018

Вот быстрый способ получить все столбцы для обеих таблиц. Сначала обратите внимание на использование employee_historypositions, поскольку оно содержит больше уникальных данных.

select 
    t1.*,
    t2.*
from
    employee_historypositions t1
join
    employees table t2
on
    t1.nik = t2.nik;

Затем вы можете заменить *, чтобы получить именно те столбцы, которые вам нужны.

Итак, если вы хотите один столбец из первой таблицы и один из второго, вы должны сделать:

select 
    t1.tgl_join,
    t2.tgl_awal
from
    employee_historypositions t1
join
    employees table t2
on
    t1.nik = t2.nik;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...