2017-05-09 6 views
0

に日時で最後の行を取得します。私は、SQLのテーブルの下にあります。は、SQL Serverの

Id | Code | DateTime1     | DateTime2 
1 3AA2 2017-02-01 14:23:00.000  2017-02-01 20:00:00.000 
2 E323 2017-02-12 17:34:34.032  2017-02-12 18:34:34.032 
3 DFG3 2017-03-08 09:20:10.032  2017-03-08 12:30:10.032 
4 LKF0 2017-04-24 11:14:00.000  2017-04-24 13:40:00.000 
5 DFG3 2017-04-20 13:34:42.132  2017-04-20 15:12:12.132 
6 DFG3 2017-04-20 13:34:42.132  NULL 

Idは、自動数値フィールドです。 コードはstringで、Datetime1とDateTime2はdatetime型です。また、DateTime1はnullでもdatetime2でもかまいません。

具体的なコードと一致し、datetime2がNULLに設定されている最後の行datetime1(MAX datetime1、最新のもの)を取得したいとします。

例えば、コードDFG3ため、テーブルの上に考慮私はID = 6を持つ行を取得したい、datetime1でのためにその最大日付、つまり「:34:2017年4月20日13 42.132」

しかし、今は、次のような場合を想像:、つまり、

Id | Code | DateTime1    | DateTime2 
1 3AA2 2017-02-01 14:23:00.000 2017-02-01 20:00:00.000 
2 E323 2017-02-12 17:34:34.032 2017-02-12 18:34:34.032 
3 DFG3 2017-03-08 09:20:10.032 2017-03-08 12:30:10.032 
4 LKF0 2017-04-24 11:14:00.000 2017-04-24 13:40:00.000 
5 DFG3 2017-04-20 13:34:42.132 NULL 
6 DFG3 2017-05-02 16:34:34.032 2017-05-02 21:00:00.032 

が再び、表の上の考慮に入れ、私は同じを取得したいと一致datetime1で(最大datetime1で、最新のもの)によって、最後の行具体的なコードであり、datetime2はNULLに設定されています。

次に、コードDFG3の最後のケースでは、Id = 6の行がコードDFG3のdatetime1(最新)であるため、NULLではないため、行は返されません。

どうすればいいですか?

+0

2番目のケースでどのような結果が必要ですか?何を試しましたか? –

答えて

1

で1つだけ選択、あなたのテーブルの上にあなたのすべての最新のコードを持参し、それはあなたのケースのために働くなら、私に知らせて

Select * From [TableName] where [Code]='DFG3' and [datetime2] is null and [datetime1] = (select max([datetime1]) from [TableName] where [Code]='DFG3') 
1

これは、このクエリを試すことができ、あなたがdatetime2 is null

SELECT * 
FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY Code 
           ORDER BY DateTime1 Desc) as rn 
    FROM yourTable 
    ) as T 
WHERE rn = 1 -- The row with latest date for each code will have 1 
    and dateTime2 IS NULL 
    and code = 'DFG3' -- OPTIONAL