如何在同一个查询SQL中使用distinct和MAX(id)?

时间:2017-01-18 13:35:38

标签: sql-server sql-server-2008

我的表格“batchno”包含8999行,batchno代表ID为7434。 我希望DISTINCT batcho用于此表。对于所有DISTINCT batchno我有47行。 对于每个batchno我想获得MAX(ID),但是每行。

我的问题是:我如何为每个DISTINCT SELECT DISTINCT batchno, (SELECT MAX(id) AS Expr1 FROM batchtracing) AS id FROM batchtracing AS batchtracing_1 WHERE (contentid = '7434')

设置MAX(id)

我尝试了这个但不是我的解决方案,这使我在列id处为所有行提供了相同的值。

Step 1: SELECT DISTINCT batchno, batchstatus FROM batchTracing WHERE (contentid = " & contentid & ") AND (batchstatus = 'active') ORDER BY batchno

Step 2:SELECT MAX(id) AS Expr1 FROM batchTracing WHERE (batchno = '" & batchno & "') AND (contentid = '" & contentid & "')

Step 3: SELECT batchstatus FROM batchtracing WHERE id =  batchTracingID

为了得到我需要的东西我使用3个查询,但我只想要一个因为慢慢来。 我现在做什么:

{{1}}

这个方法非常慢,我想只需要一个查询就能得到这一切。

enter image description here

5 个答案:

答案 0 :(得分:2)

使用rownumber:

Select b.*
From (select b.*, row_number() over (partition by batchno order by id desc) as seqnum
     From batchtracing
    ) b
Where seqnum = 1

答案 1 :(得分:2)

您过度复杂 - 您只需要按批号分组

phantomjs

如果contentid是数字列,则应删除第7434号报价,以避免不必要的转化。

答案 2 :(得分:1)

听起来你想使用GROUP BY

select batchno, max(id)
  from batchtracing
 where contentid = 7434
 group by batchno

答案 3 :(得分:1)

如果我正确理解您的问题,您只需使用C-x k

GROUP BY

答案 4 :(得分:1)

SELECT batchno,max(Id) 来自batchTracing Where ContentId ='7434' GROUP BY batchno