1

私はSQLにかなり慣れていないので、優しくしてください。答えを探してみましたが、何も見つかりません。

テーブルに次のデータがあります

Code    Area        Department          Level    Name
HWNET   Highways    Network Services    2        Bob Jones
HWNET   Highways    Network Services    1        Jim Smith
HWTRA   Highways    Traffic Services    2        Andy Johnson
HWTRA   Highways    Traffic Services    1        David Turner

テーブルからすべての列を選択したいが、各レベルの最小値のみを選択したい。私の問題は、名前を知る必要があることですが、これにより、関数によるグループの使用が妨げられています

これを使用すると、テーブル内のすべての行が返されます

SELECT Code, Area, Department,MIN(Level) Level , Name
FROM TABLE_NAME
GROUP BY Code, Area,Department, Name 

これにより、正しい行が返されますが、名前が含まれていません。

SELECT Code, Area, Department,MIN(Level) Level
FROM TABLE_NAME
GROUP BY Code, Area,Department

この一連の結果を戻す方法はありますか?

Code    Area        Department          Level    Name
HWNET   Highways    Network Services    1        Jim Smith
HWTRA   Highways    Traffic Services    1        David Turner

よろしくお願いします

4

4 に答える 4

1

通常、私はこの方法でそれを行います:

select *
  from TABLE_NAME
 where (Department, 
        Level) in (select Department,
                          min(Level)
                     from TABLE_NAME
                 group by Department)

SQL Fiddleのデモです。

あなたのデータに基づいて、Department と Level のみを使用しましたが、Code と Area も使用して正しい行を識別する必要がある場合は、WHERE 句とサブクエリの SELECT でそれらを指定するだけです。

select *
  from TABLE_NAME
 where (Code,
        Area
        Department, 
        Level) in (select Code,
                          Area,
                          Department,
                          min(Level)
                     from TABLE_NAME
                 group by Code,
                          Area,
                          Department)
于 2013-10-11T09:47:16.103 に答える
0
select   
   s.*   
from table s,  
   (select   
      code, area, department, min(level) m  
    from 
      table  
    group by 
      code,area,department  
) min_v  
where 
   s.code = min_v.code  
   and s.area= min_v.area  
   and s.department = min_v.department  
   and s.level = min_v.m  
;
于 2013-10-11T09:55:15.330 に答える