1

私の質問は少し紛らわしいことは知っていますが、データを表示すると、私が達成しようとしていることをより理解できるようになります。

私は1つのテーブルTからすべてを読んでいます。

そのテーブルTから6つのフィールドを読み取っています。

StartKey
Name
Min
LName
MName
ID

上の表はデータで、下の表は私が達成しようとしているものです。スタートキーごとにgetmax(minutes)を取得する必要があり ます。出力に含めるのを
忘れました。20130221

ここに画像の説明を入力してください

これが私がこれまでに試したことです

select 
       startkey,
       name,
       min,
       lname,
       mname,
       id
from T
where startkey >= '20130118'
group by startkey,name,lname,mname,id
order by startkey

しかし、それは機能しません

4

4 に答える 4

2

開始キーごとに、最大「最小」値を見つけます。これは、ネストされたサブクエリを介して実行できます。次に、minがmax(min)と等しい場所のみを選択します。また、2つのレコードのstartkeyとminの値が同じである可能性がある場合は、それを解決する必要があります。そうでない場合は、両方を選択します。

select  startkey, name, min, lname, mname, id
from T T1
where min = 
 (select max(min) from T T2 where T1.startkey=T2.startkey)

order by startkey
于 2013-01-25T15:08:08.590 に答える
0
select startkey, name, min, lname, mname, id
  from (select startkey, name, min, lname, mname, id,
               row_number() over (partition by startkey order by min desc) rn
          from t)
 where rn = 1;

それをする必要があります。

例:http ://sqlfiddle.com/#!4 / 59f6a0 / 1

同時に2行以上あり、それらすべてを返したい場合は、に変更row_numberしてrankください。それらの1つだけが必要な場合row_numberは、必要なものです(ただし、特定の1つを選択するために追加の順序を追加できます。

于 2013-01-25T15:04:35.523 に答える
0

あなたの質問を正しく理解したかどうかはわかりませんが、私が得たものから、特定のデータセットを取得しようとしています。必要なStartKeyのみを取得することで、フィルターを強制できます。これは機能するはずです:

SELECT StartKey, Name, Min, Lname, Mname, ID 
FROM T 
WHERE StartKey IN ('20130118','20130119','20130120')

それがうまくいかない場合は、これを試すことができます:

SELECT StartKey, Name, Min, Lname, Mname, ID
FROM T
WHERE Month(StartKey) >= 1

StartKeyが日付フィールドであると仮定します。

于 2013-01-25T15:01:57.930 に答える
0
Select *
  From T 
      Inner Join (Select StartKey, Max(Min) AS MaxMinutes
                    From T
                   Group By StartKey
                  ) DerrivedView
    On T.Start = DerrivedView.StartKey And
       T.Min = DerrivedView.MaxMinutes
于 2013-01-25T15:10:16.490 に答える