terzasek Ответов: 1

Слева соедините две таблицы каждый период даты


Таблица: drug_catalog
drug_id drug_price date_effective
типа id1 100 2017-01-01
типа id1 200 2018-01-01
типа id1 300 2019-01-01
ID2, которое 500 2017-01-01
ID2, которое 600 2020-02-01




Таблица: заказ
drug_id идентификатор заказчика date_order
типа id1 555 2017-01-02
ID2, которое 555 2018-01-02
типа id1 666 2019-01-02
типа id1 555 2018-01-02
ID2, которое 777 2020-03-01


Всем привет,у меня осталось две таблицы JOIN и мне нужно показать drug_price of date_effective
1. Таблица drug_catalog
2. Стол заказов




Ожидаемый результат
б.drug_id а.идентификатора customer_id б.drug_price а.date_order
типа id1 555 100 2017-01-02
ID2, которое 555 500 2018-01-02
типа id1 666 300 2019-01-02
типа id1 555 200 2018-01-02
ID2, которое 777 600 2020-03-01


Что я уже пробовал:

SELECT b.drug_id,a.customer_id,b.drug_price,a.date_order FROM order a LEFT JOIN drug_catalog b ON a.drug_id = b.drug_id WHERE a.date_order >= b.date_effective LIMIT 1

1 Ответов

Рейтинг:
12

Wendelius

Если я правильно понимаю ваш вопрос, возможно, что-то вроде следующего, которое использует коррелированный подзапрос. Я предполагаю, что дата вступления в силу означает вступление в силу до тех пор, пока. Если он эффективен с тех пор, то условие больше, чем должно быть меньше, и MIN должно быть заменено на MAX.

SELECT b.drug_id,
       a.customer_id,
	   b.drug_price,
	   a.date_order 
FROM           order        a 
     LEFT JOIN drug_catalog b ON a.drug_id = b.drug_id 
WHERE b.date_effective = (SELECT MIN(b2.date_effective)
                          FROM   drug_catalog b2
						  WHERE  b2.drug_id        =  a.drug_id 
						  AND    b2.date_effective >= a.date_order)

Просто интересно, правильный ли порядок таблиц в левом соединении...


terzasek

Здравствуйте, спасибо за помощь. Но этот запрос, как фокус Макс каждого drug_price.
Не могли бы вы прислать мне еще одно предложение?
Спасибо.

Wendelius

Я так понимаю, что date_effective средство эффективное от чего?

Если это так, то, как уже было сказано, измените условие в подзапросе. Иначе говоря

SELECT b.drug_id,
       a.customer_id,
	   b.drug_price,
	   a.date_order 
FROM           order        a      
     LEFT JOIN drug_catalog b ON a.drug_id = b.drug_id 
WHERE b.date_effective = (SELECT MAX(b2.date_effective)
                          FROM   drug_catalog b2
			  WHERE  b2.drug_id =  a.drug_id
			  AND    b2.date_effective <= a.date_order)

terzasek

Мне очень жаль, но это единственный способ объяснить ожидаемый результат, пожалуйста, проверьте эту ссылку. Спасибо.
https://drive.google.com/open?id=1BQwrMue4K6PNovYI8QZ3pGtZFKi3-CLi

CHill60

Я уже устал говорить вам, чтобы вы не размещали ссылки на фотографии - поместите информацию в вопрос. Многие сайты (например, упомянутый выше) блокируются корпоративными брандмауэрами. Мы помогаем на этом форуме в свободное время - часто на работе.
Не прислушиваясь к моим советам, вы просто уменьшаете число людей, которые мочь помощь.
Также имейте в виду, что в вашем посте есть ссылка на улучшение вопроса - не публикуйте новый вопрос только для добавления информации

terzasek

Ладно,я понимаю.

Wendelius

Вы пробовали второй запрос, который я написал? Насколько я вижу, это дает результат, описанный в вопросе, или я что-то упускаю?

terzasek

Да, я попробовал это сделать и подумал, что этот запрос неверен, но на самом деле он работает.
Я должен признать, что был неправ.

Wendelius

Рада, что вы получили его решена.