2011-12-01 15 views
0
Table a 
ID Name 
1 aa 
2 bb 
3 cc 

Table b 
ID Name DateTime  aID 
1 a1 2010-10-10 1 
2 b1 2010-11-10 1 
3 c1 2011-01-01 1 
4 d1 2010-09-09 2 
4 e1 2010-09-09 2 


SELECT a.Name, b.Name 
FROM Table a 
LEFT JOIN Table b ON (a.ID = b.aID, b.status = 1) 

上記のクエリの結果、テーブルbのmax(datetime)というレコードのみが必要です。 結果: -TSQLを使用して最新のレコードを取得するには?

AA、C1

注:私の本当のクエリでは、私は多くの人が参加し、どこ条件の多くを持っています。グループはここでは動作しません。

+0

結果には常に1行だけありますか?それとも、Aから各行の最大値を取得しようとしているのですか? –

+0

Tevo D.複数の行があります... – User13839404

+0

aID = 2の結果に2番目の行があるはずですので、サンプルデータを入力しますか? –

答えて

2
WHERE b.DateTime = (SELECT MAX(DateTime) FROM b) 
+0

私の実際のクエリでは、7つ以上の結合と10の条件があります... WHERE節以外の方法はありますか?ありがとう – User13839404

+0

WHEREはあなたの結果を減らすための適切な場所です。 'ON'節に' AND'をつけて同じ制約を追加することもできますが、左結合を行っているので、リストを減らすことはできませんが、 「b」値は「ヌル」となる。 –

+0

いずれの場合も(WHERE条件かON句のANDを問わず)、nullを戻します。テーブルbにNULL値がありません – User13839404

0

これは、クエリをダウンフィルタリングし、「最大」の日付を識別するために、ランキング関数を使用する方法です。注意:特定の状況では正常に動作しないことがあります。

SELECT a.Name, b.Name 
FROM Table a 
LEFT JOIN (
    select aID, DateTime, rank() over (order by b.DateTime desc) as rownum 
    from TableB 
) b ON a.ID = b.aID and b.status = 1 
where 
b.rownum = 1 -- first row 
関連する問題