2016-02-05 4 views
2

Я хочу, чтобы выбрать второе наибольшее значение из tblTasks (JobId, ITEMNAME, ContentTypeID)Выберите второе значение MAX

Вот что я хотя. Держу пари, это можно сделать легче, но я не знаю, как это сделать.

SELECT Max(JobID) AS maxjobid, 
     Max(ItemName) AS maxitemname, 
     ContentTypeID 
FROM 
     (SELECT JobID, ItemName, ContentTypeID 
     FROM tblTasks Ta 
     WHERE JobID NOT IN 
      (SELECT MAX(JobID) 
      FROM tblTasks Tb 
      GROUP BY ContentTypeID) 
      ) secmax 

    GROUP BY secmax.ContentTypeID 
+2

Второе самое высокое значение чего? Примерные данные и желаемые результаты помогут. –

ответ

2

Я предполагаю, что вам нужно что-то подобное.

SELECT JobID AS maxjobid, 
     ItemName AS maxitemname, 
     ContentTypeID 
FROM (SELECT JobID, 
       ItemName, 
       ContentTypeID, 
       ROW_NUMBER() OVER (PARTITION BY ContentTypeID ORDER BY JobID DESC) Rn 
     FROM tblTasks Ta 

     ) t 
WHERE Rn = 2 

это даст вам второй самый высокий показатель за JobId ContentTypeID

0

Вы можете использовать синтаксис, как это:

SELECT MAX(col) 
FROM table 
WHERE col < (SELECT MAX(col) 
      FROM table) 
1

Я хотел бы предложить DENSE_RANK(), если вы хотите второй JobID:

SELECT tb.* 
FROM (SELECT tb.*, DENSE_RANK() OVER (ORDER BY JobID DESC) as seqnum 
     FROM tblTasks Tb 
    ) tb 
WHERE seqnum = 2; 

Если нет дубликатов, то OFFSET/FETCH проще:

SELECT tb.* 
from tblTasks 
ORDER BY JobId 
OFFSET 1 
FETCH FIRST 1 ROW ONLY; 
+0

Есть ли причина анонимного downvote? –

+0

не мой нисходящий, но вы проигнорировали 'GROUP BY secmax.ContentTypeID', что делает решение' OFFSET/FETCH' немного жестким –

+0

@A ツ. , , Я не могу сказать, в чем заключается намерение «GROUP BY» в запросе OP. Таким образом, мое первоначальное понимание того, что запрос, казалось, делал. Возможно, что OP хочет получить вторую информацию для каждого контента, но я жду разъяснений. –

0
SELECT * FROM tblTasks ORDER BY col DESC LIMIT 1, 1 
Смежные вопросы