@Richard_Ferlow
Веб-программист

Как сделать запрос SQL к четырем таблицам?

Суть такая - есть таблицы recipient - клиенты, human - доп сведения о клиентах(дата рождения в том числе), таблицы имеют одинаковые id, по ним их можно связать
reservation - это заявки от туристов, тут указано кто оформил (humanid). то какие туристы к заявке относятся записано в таблице people.
Нужно - для менеджера(reservation.humanid) humanid которого мы знаем заранее, найти людей(recipient) которых он отправлял в путешествие и у которых сегодня день рождения. Мне в голову пришёл такой запрос

SELECT *
  FROM [samo7.0.2].[dbo].[recipient] t1 
  RIGHT JOIN [samo7.0.2].[dbo].[human] t2 ON t2.id = t1.id
  RIGHT JOIN [samo7.0.2].[dbo].[people] t4 ON t1.id = t4.humanid
  RIGHT JOIN [samo7.0.2].[dbo].[reservation] t3 ON t3.id = t4.reservationid  
  WHERE MONTH(t2.born) = 4 AND (DAY(t2.born) = 9) AND t3.humanid = ?


Но, допустим туриста менеджер отправлял 5ть раз, тогда мы в этой выборке увидим 5ть строк соответственно. А нужно получить только последнюю. В идеале тут же получить количество заявок у менеджера с этим человеком.

Совсем хорошо будет если дополнительно здесь же выбирать заявки reservation где турист был покупателем(так как он из 5ти поездок допустим сам ездил только 3 раза, а 2 других был только плательщиком). Плательщик - reservation.recipientid где recipientid - это recipient.id

Еще не могу допереть как текущий день и текущий месяц прям в запросе чтобы сам подставлялся, хотя это не проблема.

Надеюсь понятно объяснил =) Буду благодарен за помощь!
  • Вопрос задан
  • 157 просмотров
Пригласить эксперта
Ответы на вопрос 3
Fadmin
@Fadmin
Последнюю по каким критериям? по дате? Сортируйте по дате и в select top 1 добавьте.
reservation приждойнить еще раз, по recipient.id.
текущий день - дата или день недели? select DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
Ответ написан
SagePtr
@SagePtr
Еда - это святое
GROUP BY добавить, полагаю
Ответ написан
NeiroNx
@NeiroNx
Программист
А если резерваций нет то не будет человека в списке....
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы