Sélectionnez la deuxième valeur MAX

Je veux sélectionner la deuxième valeur la plus élevée de tblTasks (JobID, ItemName, ContentTypeID)

C'est ce que je pensais. Je parie que cela peut être fait plus facilement mais je ne sais pas comment.

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 

Je suppose que tu voudrais quelque chose comme ça.

 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 

cela vous donnera le deuxième plus grand logging JobID par ContentTypeID

Je suggère DENSE_RANK() , si vous voulez le second JobID :

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

S'il n'y a pas de duplicates, alors OFFSET / FETCH est plus facile:

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

Vous pouvez utiliser une syntaxe comme celle-ci:

 SELECT MAX(col) FROM table WHERE col < (SELECT MAX(col) FROM table) 
 SELECT * FROM tblTasks ORDER BY col DESC LIMIT 1, 1