2017-09-14 3 views
0

を複製した最新の日付を持つテーブル:私は日付を起動しているため、行をフィルタリングする必要がフィルター、私はテーブルを以下しているOrderIdで

enter image description here

は、与えられたテーブルにその注文ID .With参照に対応する最新のものです2番と3番の行が出力でなければなりません。 行1と行2は同じ注文IDと注文日付を持ちますが、開始日は最初の行より遅いためそして同じ行番号3と4に行くので、私は行番号3を取る必要があります。私はSQLサーバーにクエリを記述しようとしています。どんな助けもありがとうございます。詳細が必要な場合はお知らせください。英語が苦手な方へ

+1

*ない*タグのスパム関連のない製品を行います。 – Siyual

答えて

1

派生テーブルを使用する別の方法です。

select 
    t.* 
from 
    YourTable t 
inner join 
(select OrderId, max(StartDate) dt 
from YourTable 
group by OrderId) t2 on t2.dt = t.StartDate and t2.OrderId = t.OrderId 
2

あなたはROW_NUMBER()ウィンドウ機能で簡単にこれを行うことができます。

;With Cte As 
(
    Select *, 
      Row_Number() Over (Partition By OrderId Order By StartDate Desc) RN 
    From YourTable 
) 
Select * 
From Cte 
Where RN = 1 

しかし、私はStartDateデータ型を問います。これらはVARCHARとして保存されているようです。そのような場合は、DATETIMEに値をCONVERTする必要があります。

;With Cte As 
(
    Select *, 
      Row_Number() Over (Partition By OrderId 
           Order By Convert(DateTime, StartDate) Desc) RN 
    From YourTable 
) 
Select * 
From Cte 
Where RN = 1 
関連する問題