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

时间:2014-07-22 17:23:13

标签: sql

这是我的问题:

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才能将最新记录放到结果的顶部。

根据上面的数据,我希望结果如下:

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

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

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

2 个答案:

答案 0 :(得分:0)

假设您想要max 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

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

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

答案 1 :(得分:0)

然后你需要使用聚合函数。您需要决定如何处理具有多个b2_id的情况 (201302867,150)你有2 b2_ids(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子句中使用的任何列都需要使用聚合函数。常见的是Max,Min,Avg,Count