Mysql查询修改

Mysql查询修改,mysql,sql,Mysql,Sql,这是我的查询,我想获得每个组中的最新记录。我有两个表t_service_request和t_request_chkpoint 这两个表都按REQUETST_ID匹配 我想按表t\U服务请求中的客户编号分组 但是没有任何建议 t_service_request ------------ LTS|JFT|CUS_NO|REQUETST_ID| t_request_chkpoint ------------ |LTS|REQUETST_ID| 加入以上两个tab

这是我的查询,我想获得每个组中的最新记录。我有两个表t_service_request和t_request_chkpoint

这两个表都按REQUETST_ID匹配

我想按表t\U服务请求中的客户编号分组

但是没有任何建议

t_service_request
------------         
LTS|JFT|CUS_NO|REQUETST_ID|

t_request_chkpoint
------------         
|LTS|REQUETST_ID|
加入以上两个tableRequest\u id,并在每个客户号中选择最新的JFT

SELECT DISTINCT
  S.*,
  A.ID AS CID,
  A.ENTRY_ID,
  A.LTS
FROM maintenance.t_service_request S
LEFT JOIN maintenance.t_request_chkpoint A ON A.REQUETST_ID = S.REQUETST_ID AND A.STATE >= 3
WHERE S.JFT = (SELECT MAX(B.JFT)
               FROM maintenance.t_service_request B
               WHERE B.CUS_NO = S.CUS_NO
               GROUP BY B.CUS_NO)
AND S.COMPANY_ID = '0002' AND S.STATE >= 3
我想你的sql可能有一些语法错误,我不确定我是否误解了你的要求。

试试这个,可能有用

SELECT DISTINCT
  S.*,
  A.ID AS CID,
  A.ENTRY_ID,
  A.LTS
FROM maintenance.t_service_request S
LEFT JOIN maintenance.t_request_chkpoint A ON A.REQUETST_ID = S.REQUETST_ID AND A.STATE >= 3
WHERE S.JFT = (SELECT MAX(B.JFT)
               FROM maintenance.t_service_request B
               WHERE B.CUS_NO = S.CUS_NO
               GROUP BY B.CUS_NO)
AND S.COMPANY_ID = '0002' AND S.STATE >= 3

我想你的sql可能有一些语法错误,我不确定我是否误解了你的要求。

我必须承认,我仍然不明白你在问什么。然而,您的查询是不完整的,修复它可能已经解决了您的问题

你说你想得到每个组中的最新记录,在你的查询中你要寻找每个客户号的最大JFT。然而,你只是比较JFT而不是客户号

此外,您的查询在语法上是不正确的,因为它有两个WHERE子句。最后但并非最不重要的一点是,这里的外部联接条件状态>=3属于ON子句,而不属于WHERE子句

以下是更正后的查询:

select
  sr.*, 
  rc.id as cid, 
  rc.entry_id, 
  rc.lts
from maintenance.t_service_request sr 
left outer join maintenance.t_request_chkpoint rc on rc.request_id = sr.request_id
                                                  and rc.state >= 3
where sr.company_id = '0002' and sr.state >= 3
and (sr.cus_no, sr.jft) in 
(
  select cus_no, max(jft)
  from maintenance.t_service_request
  group by cus_no
);

我必须承认,我还是不明白你在问什么。然而,您的查询是不完整的,修复它可能已经解决了您的问题

你说你想得到每个组中的最新记录,在你的查询中你要寻找每个客户号的最大JFT。然而,你只是比较JFT而不是客户号

此外,您的查询在语法上是不正确的,因为它有两个WHERE子句。最后但并非最不重要的一点是,这里的外部联接条件状态>=3属于ON子句,而不属于WHERE子句

以下是更正后的查询:

select
  sr.*, 
  rc.id as cid, 
  rc.entry_id, 
  rc.lts
from maintenance.t_service_request sr 
left outer join maintenance.t_request_chkpoint rc on rc.request_id = sr.request_id
                                                  and rc.state >= 3
where sr.company_id = '0002' and sr.state >= 3
and (sr.cus_no, sr.jft) in 
(
  select cus_no, max(jft)
  from maintenance.t_service_request
  group by cus_no
);


@Nalincoray我已经更新了帖子,请再次检查。选择S.*,A.ID作为CID,A.ENTRY\u ID,A.LTS FROM maintenance.t_service_request S LEFT JOIN maintenance.t_request_chkpoint A ON A.request_ID=S.request_ID AND S.STATE>=3,其中S.JFT=从maintenance.t_service_request B中选择MAXB.JFT,其中B.CUS_NO=S.CUS_NO组由B.CUS和S.COMPANY_ID='0002'和S.STATE>=3,A.STATE>=3这是有效的,但选择重复records@Nalincooray嗯,在sql中添加一个DISTINCT关键字query@Nalincooray你能在你的帖子中提供一些样本数据吗?因为我不知道实际数据是什么。@n如果我已经更新了帖子,请再次检查。选择S.*,A.ID作为CID,A.ENTRY\u ID,A.LTS FROM maintenance.t_service_request S LEFT JOIN maintenance.t_request_chkpoint A ON A.request_ID=S.request_ID AND S.STATE>=3,其中S.JFT=从maintenance.t_service_request B中选择MAXB.JFT,其中B.CUS_NO=S.CUS_NO组由B.CUS和S.COMPANY_ID='0002'和S.STATE>=3,A.STATE>=3这是有效的,但选择重复records@Nalincooray嗯,在sql中添加一个DISTINCT关键字query@Nalincooray你能在你的帖子中提供一些样本数据吗?因为我不知道实际的数据是什么,但不起作用意味着什么?语法错误?太多行了?太少了?还有什么?这可以从t\U服务中选择a.lts、maxa.jft、a.cus\u no、a.request\u id、b.lts、b.request\u id请求a加入t\u服务\u chkpoint b在a.request\u id=b.request\u id组上按a.cus\u no;但是复制记录选择什么类型的复制记录?实际上你可以提供更多关于你的表格的信息,比如结构,样本数据等。在JFT 20160302144400,20160327113100,20160315134500,20160313164200,20160323103000中,我仍然不明白什么是有效的,什么是无效的,什么是无效的。不过,我已经发布了一个答案。我认为这将使我们更快地到达我们想要到达的地方。但没有工作意味着什么?语法错误?太多行了?太少了?还有什么?这可以从t\U服务中选择a.lts、maxa.jft、a.cus\u no、a.request\u id、b.lts、b.request\u id请求a加入t\u服务\u chkpoint b在a.request\u id=b.request\u id组上按a.cus\u no;但是复制记录选择什么类型的复制记录?实际上你可以提供更多关于你的表格的信息,比如结构,样本数据等。在JFT 20160302144400,20160327113100,20160315134500,20160313164200,20160323103000中,我仍然不明白什么是有效的,什么是无效的,什么是无效的。不过,我已经发布了一个答案。我想这会让我们更快地到达我们想要的地方。谢谢你,它奏效了……如果我想选择最新的2或3张唱片,怎么做?那会更复杂。您不必在子查询中选择MAXjft,而是必须为客户号选择不超过一个或两个jft较高的记录。这意味着您需要在子查询中选择一个子查询。试一试,如果你失败了,请在单独的SO请求中请求帮助。谢谢你,它成功了……如果我想选择最新的2或3张唱片,怎么做?那会更复杂。与在子查询中选择MAXjft不同,您必须选择 ect记录的存在不超过一个或两个记录,且客户号的jft较高。这意味着您需要在子查询中使用子查询。尝试一下,如果你失败了,可以在单独的SO请求中请求帮助。