繁体   English   中英

在某一列上选择DISTINCT,该列将使用多个表返回多个列

[英]Select DISTINCT on one column that returns multiple columns using more than one table

这是我的查询:

SELECT dtljob.lj_jobnum, dtbom2.b2_id,dtbom2.b2_ljid
FROM dtbom2, dtljob
WHERE dtbom2.b2_ljid = dtljob.lj_id
ORDER BY dtbom2.b2_id DESC

这是我的结果:

lj_jobnum   b2_id   b2_ljid
201302867   230     150
201302867   229     150
201302807   228      87
201302807   227      87
201402911   226     200
201402911   225     200
201403027   224     320
201403027   222     320

我的问题是我只想查看li_jobnum和b2_ljid的唯一记录,并且我需要order by b2_id desc进行结果order by b2_id desc以使最新记录到达结果的顶部。

根据上面的数据,这是我希望得到的结果:

lj_jobnum   b2_id   b2_ljid
201302867   230     150
201302807   228      87
201402911   226     200
201403027   224     320

只要结果按b2_id desc排序,我真的不需要结果中的b2_id。

如何更改查询以获得所需的结果?

假设您想要最大b2_Id,则聚合函数将起作用。 这些必须按语句分组。 我还对表格进行了别名处理,以使它们更易于阅读。

SELECT  b.lj_jobnum, max(a.b2_id) max_b2_ID, a.b2_ljid  
FROM dtbom2 a, dtljob b
WHERE  a.b2_ljid = b.lj_id
GROUP BY b.lj_jobnum, a.b2_ljid 
ORDER BY  max_b2_ID desc

或(使用更现代的连接语法)

SELECT  b.lj_jobnum, max(a.b2_id) max_B2_ID, a.b2_ljid  
FROM dtbom2 a
INNER JOIN dtljob b
  ON a.b2_ljid = b.lj_id
GROUP BY b.lj_jobnum, a.b2_ljid 
ORDER BY  max_b2_id desc

然后,您需要使用聚合函数。 您需要决定如何处理具有多个b2_id的情况,例如(201302867,150),其中您有2个b2_id为(229,230)的情况

看来您只想要2的最大值并订购它。

因此您的查询可能看起来像这样。

Select  lj_jobnum, b2_ljid
from dtbom2, dtljob 
Where   dtbom2.b2_ljid = dtljob.lj_id
Group By lj_jobnum, b2_ljid
Order by Max(b2_id) Desc

Group By将在子句中创建不同的列集。 您想要在group by子句中使用NOT的任何列都需要使用聚合函数。 常见的是最大,最小,平均,计数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM