2017-09-03 7 views
0

Je le tableau suivant Employee:SQL: SyntaxError: commande par avec fonction row_number()

+----+--------+ 
| Id | Salary | 
+----+--------+ 
| 1 | 150 | 
| 2 | 290 | 
| 3 | 302 | 
+----+--------+ 

J'utilise le code suivant pour trouver le deuxième salaire le plus élevé:

with t as 
(
    select 
     Salary, 
     row_number() over (order by Salary desc) as salary_ord 
    from 
     Employee 
) 
select Salary 
from t 
where salary_ord == 2 

Cependant, Je reçois une erreur:

SyntaxError: near 't as (
select Salary, row_number() over (order by Salary desc) as salary_ord'

Qu'est-ce que j'ai fait de mal ici? Merci!

+1

Quelle base de données utilisez-vous? Veuillez marquer correctement. –

Répondre

2

En SQL, l'opérateur de comparaison correct est =, pas ==. Donc, ceci est la version ANSI SQL de votre requête:

with t as (
     select Salary, row_number() over (order by Salary desc) as salary_ord 
     from Employee 
    ) 
select Salary 
from t 
where salary_ord = 2; 

Cependant, votre erreur suggère que votre base de données ne prend pas en charge with ou fonctions de la fenêtre.

0

Dans SQL Server,

Vous pouvez faire:

select top 1 Salary 
from Employee 
order by Salary desc 
offset 1 row fetch next 1 row only