Intereting Posts
SQL UPDATE с подзапросом, который ссылается на ту же таблицу в MySQL SQL – как выбрать слова с определенными значениями в конце слова Обновление строки с подзапросом Возвращение нескольких строк Не удалось включить ограничения. Одна или несколько строк содержат значения, нарушающие непустые, уникальные или внешние ключи SqlDependency onchange бесконечный цикл событий Метод данных типа XML «значение» должен быть строковым литералом Как объединить значения с одинаковым идентификатором в sql Как использовать обычный sql в ASP.NET MVC без EF? Сложная сумма в SQL Получите максимальное количество заказов в диапазоне ROW_NUMBER () в MySQL Есть ли какая-либо библиотека для представления SQL-запросов в качестве объектов в Java-коде? Группа MySQL по номерам серии Mysql Query Issue Date минус 7 дней Postgresql – использование подзапросов с выражениями альтернативной последовательности

объединить таблицы с отношением 1 к N в 1 строку записи с последним значением N записи

Мне нужна модификация моего предыдущего сообщения о том, как объединить таблицы с отношением 1 к многим в 1 строку записи

как объединить таблицы с отношением 1 к многим в 1 строку записи

теперь моя проблема заключается в том, что у моей записи есть 1 отношение к многим. Мне нужно показать только последнюю запись и объединить ее в однострочные таблицы tbl_equipment и tbl_warranty

введите описание изображения здесь

и вот нужный результат введите описание изображения здесь

вот код, который я пытаюсь реализовать

SELECT a.equipmentid, a.codename, a.name, a.labelid, a.ACQUISITIONDATE, a.description, a.partofid, w1.warrantyid as serviceidwarranty, w1.startdate, w1.enddate, w2.warrantyid as productidwarranty, w2.startdate, w2.enddate, s.equipstatusid, l.equiplocationid FROM TBL_EQUIPMENTMST a left JOIN tbl_equipwarranty w1 ON w1.equipmentid=a.equipmentid and w1.serviceproduct = 'service' left JOIN tbl_equipwarranty w2 ON w2.equipmentid=a.equipmentid and w2.serviceproduct = 'product' left join tbl_equipstatus s on a.equipmentid = s.equipmentid left join tbl_equiplocation l on a.equipmentid = l.equipmentid WHERE a.equipmentid = '112' 

Я хочу показать только 1 запись с последним значением гарантийного продукта и гарантийного обслуживания на выходе. Может ли кто-нибудь указать мне, как изменить мой код, чтобы при попытке присоединиться ко всем перечисленным выше таблицам вы можете сделать 1 запись только с последней гарантией в качестве выхода. Я использую firebird как базу данных. Если у вас есть решение в mysql, любезно скажите мне, и я попытаюсь найти контрагента в firebird.

 with summary as( select e.equipmentid ,e.Codename,e.Name,w.warrantyid ,w.Satartdate ,w.Enddate,w.warrantytype from Eqp e join Warranty w on(w.equipmentid =e.equipmentid ) where w.warrantyid =3) select *,w.warrantyid,w.Satartdate ,w.Enddate,w.warrantytype from summary s join Warranty w on s.Satartdate =w.Satartdate and s.Enddate =w.Enddate where w.warrantyid =4 

после прочтения комментария Бармара по вопросу о решении. Я понял, что подзапрос может решить мою проблему. Подзапрос – это новое слово для меня. Я изучаю, как использовать подзапрос, и вышел с решением ниже. вы можете исправить меня, если мой код неверен или как повысить производительность запроса

 SELECT a.equipmentid,a.codename,a.name,a.labelid,a.ACQUISITIONDATE,a.description,a.partofid, w1.warrantyid as serviceidwarranty,w1.startdate,w1.enddate, w2.warrantyid as productidwarranty,w2.startdate,w2.enddate, s.equipstatusid, l.equiplocationid FROM TBL_EQUIPMENTMST a left JOIN (select first 1 * from tbl_equipwarranty where equipmentid='112' and serviceproduct = 'service' order by warrantyid desc) w1 ON w1.equipmentid = a.equipmentid and w1.serviceproduct = 'service' left JOIN (select first 1 * from tbl_equipwarranty where equipmentid = '112' and serviceproduct = 'product' order by warrantyid desc) w2 ON w2.equipmentid = a.equipmentid and w2.serviceproduct = 'product' left join (select first 1 * from tbl_equipstatus where equipmentid = '112' order by equipstatusid desc) s on a.equipmentid = s.equipmentid left join (select first 1 * from tbl_equiplocation where equipmentid = '112' order by equiplocationid desc) l on a.equipmentid = l.equipmentid WHERE a.equipmentid = '112'