2017-01-18 2 views
0

У меня есть таблица «batchtracing» с 8999 строк для batchno для id 7434. Я хочу DISTINCT batchno для этой таблицы. Для всех DISTINCT batcho У меня есть 47 строк. За каждые batchno я хочу получить MAX (ID), но для каждой строки.Как использовать отдельные и MAX (id) в одном запросе SQL?

Мои вопросы: Как я могу иметь MAX (ID) для каждого DISTINCT batchno

Я стараюсь это, но это не мое решение, это поставило меня для всех строк же значение в колонке ID.

SELECT DISTINCT batchno, 
          (SELECT  MAX(id) AS Expr1 
          FROM   batchtracing) AS id 
FROM   batchtracing AS batchtracing_1 
WHERE  (contentid = '7434') 

Чтобы получить то, что мне нужно, я использую 3 запроса, но я хочу только один, потому что это медленно. Что мне теперь делать:

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 

Этот метод очень медленно, и я хочу только один запрос, чтобы привести все это.

enter image description here

ответ

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 
+0

Вы думаете, что можете сделать для моего примера? Я не понимаю из этого примера – Vladut

+0

Мне нужен один пример для contentid = '7434') – Vladut

+0

@ Vladut этот запрос получает строку с самым высоким идентификатором для batchno из batchrracing, поэтому вы также можете получить свой статус и т. Д. Просто добавьте 'where contentid = '7434'' в подзапрос. – SqlZim

1

Это звучит, как вы хотите использовать GROUP BY.

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

Если я правильно понимаю ваш вопрос, все, что вам нужно сделать, это использовать GROUP BY:

Select BatchNo, Max(Id) As Id 
From BatchTracing 
Where ContentId = '7434' 
Group By BatchNo 
+0

А если хотите поставить столбец batchstatus? – Vladut

+0

@ Vladut Это совсем другой вопрос, чтобы использовать это [Gordon Linoff's Answer] (http://stackoverflow.com/a/41720928/3393505). – Siyual

+0

Рабочие решетки, спасибо большое! – Vladut

1

ВЫБЕРИТЕ batchno, макс (Id) FROM batchTracing Где ContentID = '7434' GROUP BY batchno

2

вы более усложняя это - вам просто необходимо сгруппировать по номеру партии

SELECT batchno, MAX(id) 
FROM batchtracing 
WHERE contentid = '7434' 
GROUP BY batchno 

Если contentid является числовым столбцом, вы должны удалить кавычки вокруг 7434, чтобы избежать ненужных преобразований.

Смежные вопросы