Как вставить даты из таблицы в другую таблицу для двух разных условий - PullRequest
0 голосов
/ 07 февраля 2019

Я хочу получить информацию о дате (b.date) с условием (т. Е. Когда c. Code = 001, тогда b. Date должен получить даты за прошлый месяц, а для кода c., Отличного от 001, затем b.Дата должна быть больше sysdate) из таблицы b и таблицы c.Пожалуйста, найдите ниже объяснение того же.Создать таблицу A как (выберите b. Date, c. Код из таблицы b, таблица c, где b. Code = c.code и b. Date должен получить даты за последний месяц, когда c. Code = 001 и b. Date долженполучить даты больше sysdate, когда c. Код отличается от 001)

Таблица A должна быть заполнена столбцами даты и кода ниже. Например,

Code       Date
Code001    7/01/19 
Code001    8/01/19
...
Code111    7/02/19  

Не могли бы вы сказать мнеКак я могу добиться этого с помощью оракула SQL?

Пожалуйста, дайте мне знать, если вам нужна какая-либо другая информация по этому вопросу или мое объяснение сбивает с толку.

Спасибо за вашу поддержку, Вани.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Этого можно добиться, реализовав логику в предложении WHERE.

WHERE 
    ( c.Code = '001' AND b.Date >= TRUNC(sysdate, 'mm')
    OR b.Date >= sysdate

Или, может быть (если вы храните даты без времени)

WHERE 
    ( c.Code = '001' AND b.Date >= TRUNC(sysdate, 'mm')
    OR b.Date >= TRUNC(sysdate)

NB: функции даты широко варьируются в зависимости от РСУБД;вышеуказанное решение для Oracle.В MySQL вы должны сделать:

WHERE 
    ( c.Code = '001' AND b.Date >= DATE_FORMAT(CURDATE(), '%Y-%m-01')
    OR b.Date >= NOW() -- or CURDATE()
0 голосов
/ 07 февраля 2019

Я не уверен в этом вопросе, однако, основываясь на том, что вы предоставили, я делаю объединение двух запросов (#Oracle Sql) .. Я понимаю, что это не будет оптимизированный запрос в зависимости от размера таблицы, он может потреблять ресурсы из-за декартового произведения .. см. ниже:

select b.date,c.code from <table> b,<table> c 
where b.code=c.code 
  and c.code='001'
  and b.date>= trunc(add_months(sysdate, -1),'MM') and b.date<trunc(sysdate, 'MM')
union
select b.date,c.code from <table> b,<table> c 
where b.code=c.code 
  and c.code<>'001'
  and b.date>sysdate;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...