基本情况:表G是项目的详细信息,里面AutoID,ProID字段是主键,表J是项目的施工进度,定期向表J中插入施工的进度情况,主要是根据表G的ProID进行联系。
想要实现的目的:根据表G的ProID查看所有项目最新的进度,若有多条进度,只查看最新的,若没有任何进度,则只查看相关的项目信息。
表G表中有AutoID,ProID,ProName等字段,并且AutoID,ProID都是唯一的,表J里有XMFZRTianBaoShiJian和ProID,其中XMFZRTianBaoShiJian是唯一的,但ProID不是唯一的,这样以下语句查询出来就有可能存在多条XMFZRTianBaoShiJian不同但ProID相同的记录,如何只显示XMFZRTianBaoShiJian其中时间最新的记录呢?
SELECT G.AutoID AS 流水号,G.ProID AS 项目编号,G.ProName AS 项目名称, J.ProJingDu AS 项目进度,J.ProWenTi AS 存在问题,J.XMFZRTianBaoShiJian AS 进度填报时间 FROM G LEFT OUTER JOIN J ON G.proid=J.ProID ORDER BY AutoID
------解决方案--------------------
是这样吗:
SELECT G.AutoID AS 流水号 ,
G.ProID AS 项目编号 ,
G.ProName AS 项目名称 ,
J.ProJingDu AS 项目进度 ,
J.ProWenTi AS 存在问题 ,
max(J.XMFZRTianBaoShiJian) AS 进度填报时间
FROM G
LEFT OUTER JOIN J ON G.proid = J.ProID
group by G.AutoID AS 流水号 ,
G.ProID AS 项目编号 ,
G.ProName AS 项目名称 ,
J.ProJingDu AS 项目进度 ,
J.ProWenTi AS 存在问题
ORDER BY AutoID
------解决方案--------------------
SELECT
G.AutoID AS 流水号,G.ProID AS 项目编号,G.ProName AS 项目名称, J.ProJingDu AS 项目进度,J.ProWenTi AS 存在问题,J.XMFZRTianBaoShiJian AS 进度填报时间
FROM
G LEFT OUTER JOIN J ON G.proid=J.ProID
WHERE NOT EXISTS(SELECT 1 FROM J AS J1 WHERE ProJingDu=J.ProJingDu AND ProWenTi=J.ProWenTi AND XMFZRTianBaoShiJian<J1.XMFZRTianBaoShiJian)
ORDER BY AutoID
------解决方案--------------------
select G.AutoID AS 流水号,G.ProID AS 项目编号,G.ProName AS 项目名称,
J.ProJingDu AS 项目进度,J.ProWenTi AS 存在问题,J.XMFZRTianBaoShiJian AS 进度填报时间
from 表G G
left join (select a.*
from 表J a
where not exists(select 1
from 表J b
where b.ProID=a.ProID
and b.XMFZRTianBaoShiJian>a.XMFZRTianBaoShiJian)) J on G.proid=J.ProID
order by G.AutoID