mysql - 将具有 1 到 N 关系的表合并为 1 行记录,并使用 N 条记录的最后一个值

标签 mysql sql firebird firebird2.5

我需要修改我之前的帖子 如何将具有一对多关系的表组合成1行记录

how to combine tables with 1 to many relationship into 1 line of record

现在我的问题是我的记录现在有一对多的关系。我需要显示的只是最后一条记录并将其组合在一行中 表 tbl_equipment 和 tbl_warranty

enter image description here

这是所需的输出 enter image description here

这是我要实现的代码

 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

关于mysql - 将具有 1 到 N 关系的表合并为 1 行记录,并使用 N 条记录的最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26882396/

相关文章:

php - 我想使用 PhP 删除组合框中的选定项目,并且该项目也必须反射(reflect)在数据库中

php - 在 PHP 中循环 mysql_fetch_array

PHP PDOException 找不到驱动程序

sql - SQL到NHibernate标准查询转换

c# - 如果在 sql server 中回滚事务,它会删除临时表(在事务中创建)吗?

sql - 不同where条件句的聚合函数

database - 考虑拼写错误和部分结果的数据搜索基础

javascript - 使用 Node js 将动态字段值插入 mysql DB 时,发送后无法设置 header ?

delphi - 带有欧元符号的 UTF8、IBX 和 Firebird

c# - Firebird 存储过程,从 C# 触发,插入两行或更多行,只需要一行