![](/img/trans.png)
[英]Using Distinct(col) in a SELECT with more than one column selected
[英]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.