2017-03-24 6 views
0

I持っている自分の名前、学校、電話番号が表示され、日付が開始され、それがPostgreSQLの - 最小最大エントリ

select * from Students; 

以下のように見え、結果は下記の通りですビューと呼ばれる学生

Name  | School | Phone | Date_Started 

Student A Electrical Eng 0424477876  1/02/2008 
Student B Software Eng  0425432598  1/02/2008 
Student C Mathematics  0487639487  2/02/2012 
Student D Photovoltaic  0425588596  4/06/2012 
Student G Commerce   0425588692  6/08/2014 

今度は最初に始まった生徒と最後に開始された日付に基づいて開始された生徒を見つけ出すビューを作成し、次の出力を生成する必要があります。

Started | Name | School | Date_Started 
first  Student A Electrical Eng  1/02/2008 
first  Student B Software Eng  1/02/2008 
last   Student G Commerce   6/08/2014  

これには、これを達成するために既存のビューを使用する新しいビューが必要です。

私はpostgreSQLを初めて使用しており、動作していないケースステートメントを試してみました。ありがとうございました。

答えて

0

UNIONを使用すると、2つのクエリの結果を組み合わせることができます。

SELECT 'first' Started, Name, School, Date_Started 
FROM Students WHERE Date_Started = (SELECT MIN(Date_Started) FROM Students) 
UNION 
SELECT 'last' Started, Name, School, Date_Started 
FROM Students WHERE Date_Started = (SELECT MAX(Date_Started) FROM Students) 
+0

をANS試すことができ、これは働いていた、ありがとう!しかし、私は少なくとも2つのエントリがあったため、PostgreSQLが最初の最小エントリを見つけて出力するべきではないかと疑問に思っていますか? Studentsからselect min(date_started)と入力すると、1行だけが出力されるためです。 – uniaus

+0

@uniausはい 'SELECT MIN(...)'はただ一つの行を返しますが、最小値と同じ値を持つ行が複数あります。外側のクエリは、両方のエントリを選択します。 – kennytm

2

あなたは、単一の文でそれを計算するために窓関数を使用することができます。

select * 
from (
    SELECT case 
      when date_started = min(date_started) over() then 'first' 
      when date_started = max(date_started) over() then 'last' 
     end as Started, 
     Name, School, Date_Started 
    FROM Students 
) s 
where started in ('first', 'last') 
order by date_started; 
0

やああなたは、これは

select 'First' as 'Started',* from student where Date_Started =(select min(Date_Started) from student) 
union 
select 'Last' as 'Started',* from student where Date_Started =(select max(Date_Started) from student) 
+1

こんにちはRushabh、ありがとう。それは働いて、なぜ最小の両方の最小限のエントリだけでなく、学生が選択したmin(date_started)を入力すると、それが最初に見つけたので、最初のものを返すのだろうかと思います。 – uniaus

+0

はい、正解では1つの値しか返しません。同じ値を持つ2つのエントリがあるので、その値をwhere節に入れて、minまたはmaxとして言及しているすべての値を返します –