Слева Соединить две таблицы с разделом и некоторыми определенными условиями - PullRequest
0 голосов
/ 22 марта 2019

Я хотел бы объединить две таблицы. Одна таблица - это фактические данные таблицы, а другая таблица - таблица обзора, в которой я проверяю что-то, что я хочу объединить в две таблицы при условии даты.
Таблица 1 имеетбольшое количество данных с account_id, Partner_id, Dates и actual_review.
Таблица обзора - это таблица, содержащая данные с account_id, Partner_id, датой проверки и review_recommended.

То, что я делаю, - это беру учетную запись и проверяю учетную запись и добавляю эту оценку в review_recommended.

Table 1:  
Id_partner | Id_account |    Date    |  actual_review  
    4      |   7009     | 2018/12/23 |     Good        
    4      |   7009     | 2018/12/25 |     Good    
    4      |   7009     | 2018/12/27 |     Good    
    4      |   7009     | 2018/12/31 |     Bad    
    4      |   7009     | 2019/01/10 |     Good    
    4      |   7009     | 2019/01/14 |     Good    
    4      |   7009     | 2019/01/16 |     Bad    
    4      |   7009     | 2019/02/12 |     Good    
    4      |   7009     | 2019/02/15 |     Good    
    4      |   7009     | 2019/02/18 |     Bad    
    4      |   7009     | 2019/02/25 |     Bad    
    4      |   7009     | 2019/03/05 |     Bad    
    4      |   7009     | 2019/03/06 |     Good    
    4      |   7009     | 2019/03/09 |     Good    
    4      |   7009     | 2019/03/12 |     Good    
    4      |   7009     | 2019/03/15 |     Bad    
    4      |   7009     | 2019/03/18 |     Bad    
    4      |   7009     | 2019/03/20 |     Good  

Я принимаю во внимание и чем их обзор делает это более влажнымХорошо или плохо, и у меня будет другая таблица с этими отзывами, которые я проверяю для учетной записи через некоторый интервал, скажем, если бы я проверял учетную запись сегодня, я могу сделать проверку учетной записи через некоторое время или когда-нибудь

Review Table :  
Id_partner | Id_account | Date_review |  review_recommended  
   4       |   7009     | 2018/12/22  |     Good   
   4       |   7009     | 2019/01/20  |     Bad  
   4       |   7009     | 2019/02/16  |     Good  
   4       |   7009     | 2019/03/12  |     Bad  

Я хотел бы объединить две таблицы таким образом, чтобы, пока я не просмотрю их снова, мне нужно, чтобы обзор_рекомендовал быть одинаковым до следующего

Я пытался сделать это с помощью левого соединения, но это затрудняет, так как объединяет большинствостроки

Table After Joining :
Id_partner | Id_account |    Date    |  actual_review | review_recommended  
    4      |   7009     | 2018/12/23 |     Good       |      Good  
    4      |   7009     | 2018/12/25 |     Good       |      Good  
    4      |   7009     | 2018/12/27 |     Good       |      Good  
    4      |   7009     | 2018/12/31 |     Bad        |      Good  
    4      |   7009     | 2019/01/10 |     Good       |      Good  
    4      |   7009     | 2019/01/14 |     Good       |      Good  
    4      |   7009     | 2019/01/16 |     Bad        |      Good  
    4      |   7009     | 2019/02/12 |     Good       |      Bad  
    4      |   7009     | 2019/02/15 |     Good       |      Bad  
    4      |   7009     | 2019/02/18 |     Bad        |      Good   
    4      |   7009     | 2019/02/25 |     Bad        |      Good   
    4      |   7009     | 2019/03/05 |     Bad        |      Good   
    4      |   7009     | 2019/03/06 |     Good       |      Good   
    4      |   7009     | 2019/03/09 |     Good       |      Good   
    4      |   7009     | 2019/03/12 |     Good       |      Good   
    4      |   7009     | 2019/03/15 |     Bad        |      Bad   
    4      |   7009     | 2019/03/18 |     Bad        |      Bad   
    4      |   7009     | 2019/03/20 |     Good       |      Bad   

Объединение выполняется для id_accounts, id_partners, Date и Date_review, так как у нас много аккаунтов и партнеров в таблице.Любое руководство или помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Вот один из способов решения этой проблемы в mysql test1 - это ваша таблица 1, а test2 - ваша таблица обзора.

Эту проблему можно легко решить с помощью row_nmber

но так как вы не определили версию своей базы данных и назвали это лучшее решение

select d.*,test1.actual_review, test2.review_recommended
FROM test2
inner join 
(
SELECT dates,
       Id_partner,
       Id_account,
       MAX(Date_review) AS Date_review
FROM (SELECT test1.*, test2.`Date_review`, test2.`review_recommended`
      FROM test1
           LEFT JOIN test2
              ON     test2.`Id_account` = test1.`Id_account`
                 AND test2.`Id_partner` = test1.`Id_partner`
      WHERE test1.Dates > test2.`Date_review`) DATA
GROUP BY dates, Id_partner, Id_account )d
ON test2.Date_review =d.Date_review 
inner join test1 on d.dates = test1.dates and d.Id_account = test1.Id_account and d.Id_partner = test1.Id_partner;

РЕДАКТИРОВАТЬ 1, используя row_number

select * from (
select  data.*,row_number() over (partition by  Id_account,Id_partner,dates  order by Date_review desc  ) as sr_no from 
(SELECT test1.*, test2.`Date_review`, test2.`review_recommended`
      FROM test1
           LEFT JOIN test2
              ON     test2.`Id_account` = test1.`Id_account`
                 AND test2.`Id_partner` = test1.`Id_partner`
      WHERE test1.Dates > test2.`Date_review`) as data) as d 
      where d.sr_no =1;
0 голосов
/ 22 марта 2019

Пожалуйста, попробуйте это.

SELECT 
  A.Id_partner ,A.Id_account ,A.Date,A.actual_review  ,B.review_recommended  
FROM table1 AS A
  LEFT JOIN Review AS B
  ON A.Id_account  = B.Id_account 
  AND A.Id_partner = B.Id_partner 
...