2017-11-14 10 views
3

これは簡単な問題だと思いますが、簡単な答えが見つかりません。私は日付で最後の2つのエントリを取得する必要があります。最新の日付を取得するためにmax()を使用しました。次の最新のものを取り出す方法はわかりません。SQL Serverの最後の日付に戻す

最新の日付のストアドプロシージャのコードは次のようになります。だから私は、次の最新の入手できますどのように別の手順を使用して

SELECT * 
FROM Table 
WHERE Date=(SELECT MAX(Date) FROM Table); 

? ...

select top 1 t.* 
from t 
where t.date != (select max(date) from table) 
order by date desc; 

かを

select top 2 t.* 
from t 
order by date desc; 
+0

1レコードまたは2が必要ですか?あなたのメインタイトルは2番目のマックス(1レコード)を意味する "最後の日付の隣"と言います。あなたの説明によると、トップ2が必要です。 –

+0

私は簡単に最新の日付を取得し、そのsprocを構築することができます。だから私は2番目の最新のものが必要です。私は別のsprocsを書くつもりだった。 –

+0

試してみて、どちらもうまくいきます。私はちょうど次の最新の日付を取得するコードを使用します。そのトリックは「Order By」で、これは必要に応じてデータをソートします。助けてくれてありがとう。 –

答えて

3

あなたはorder bytopを使用することができます。 ..

with cte as(
select 
    t.* 
    ,row_number() over (order by t.date desc) as RN 
from table t) 

select * 
from cte 
where RN = 2 
+0

ユーザーは次の最新のものを望むようです。最新の2つではありません。 – scsimon

+0

@scsimon。 。 。それは私がどのように質問を解釈するかではなく、 "最近の次のものを取り出す方法を知らない"。 –

+0

それは公正な@GordonLinoffだし、私が最初にそれを読んでからもっと近くに調べるまで – scsimon

0

をそれともあなたが述べたようにだけ...これだけの行を返す次の最新を取得するには:

+0

このアプローチは、 'max(date)'を持つ複数の行がある場合、彼が望むものを返さないかもしれない。 – Beth

+0

@Beth私はネクタイと一緒に使っていないので、2番目のものはないでしょう。最初の1つを使用するので、最初のものはありません – scsimon

+0

最初のものではなく、2番目のものにコメントします(これは他の答えと同じです)。 2行の 'max(date)'は同じ値ですが、あなたの '!='、no? – Beth

関連する問題