値が

2017-02-23 2 views
-1

に基づいて最後に更新されたレコードを引き出すことができれば、私の比較的簡単なクエリで助けてください。値が

各IDについて、ステータス= 16が最新の更新日であったレコードをプルするSQLクエリが必要です。このリストから

ID  Date     Status 
000203E 1988-01-01 00:00:00.000 16 
000203E 1970-01-01 00:00:00.000 15 
000236S 1970-01-01 00:00:00.000 15 
000236S 1982-12-15 00:00:00.000 16 
000678W 1996-06-05 00:00:00.000 16 
000678W 1970-01-01 00:00:00.000 15 
000755U 1984-04-16 00:00:00.000 14 
000755U 1970-01-01 00:00:00.000 16 

所望の出力事前に

000203E 1988-01-01 00:00:00.000 16 
000678W 1996-06-05 00:00:00.000 16 

ありがとう! id Sを取得するための

+1

何? – Mureinik

+0

私は理解できません、なぜその2つだけですか?ステータス16のエントリが2つ追加されています。 – Blindy

+0

最新ステータスの場合はステータスが16になります。私はステータス= 16の最新の日付を欲しい。 – lpd983

答えて

2

一つの方法は、集約を使用することです:

select id 
from t 
group by id 
having max(date) = max(case when status = 16 then date end); 

あなたは完全な行をしたい場合、あなたはinまたはexistsまたはjoinを使用することができます。それとも結果を転嫁:完全な行を取得するために

select id, max(date) as date, 16 as status 
from t 
group by id 
having max(date) = max(case when status = 16 then date end); 

もう一つの方法は次のとおりです。[:RDBMSタグ]を使用している

select t.* 
from t 
where t.status = 16 and 
     t.date = (select max(t2.date) from t t2 where t2.id = t.id); 
+0

ありがとう、明日の仕事に挑戦します! – lpd983

+0

これは非常に助けてくれてありがとう!私はこのサイトが大好きです。 – lpd983

0
SELECT  table.* 
FROM  table 
INNER JOIN 
(
    SELECT id, max(date) max_date 
    FROM table 
    WHERE status_id = 16 
    GROUP BY id 
)   latest_records 
ON 
    table.id = latest_records.id 
    AND table.date = latest_records.max_date 
+0

ありがとう、私は明日の仕事に挑戦する! – lpd983

0
SELECT ID, DATE, Status 
FROM YOUR_TABLE T1 
INNER JOIN (SELECT ID, MAX(Date) DATE 
      FROM  YOUR_TABLE 
      GROUP BY ID) T2 
WHERE T1.ID = T2.ID AND T1.DATE = T2.DATE; 
+0

ありがとう、私は明日の仕事に挑戦します! – lpd983