2011-01-03 9 views
2

2つのテーブルがあります。TSQL列の最大値を持つテーブルの行の詳細を取得するクエリ

表1

Num 
1 
2 
3 

表2

Num Date Amount 
1  12/31  30 
1  12/30  31 
1  12/29  20 
2  12/31  100 
2  12/30  90 
3  12/31  12 
4  11/1  1 

今私の結果はどこtable2ので参加し、表1の 'テンキー' の値について(

Num Date Amount 
    1 12/31  30 
    2 12/31  100 
    3 12/31  12 

を持つべきです日付は最新のもの)

これを達成するためにtsqlクエリを作成しようとしています。

何か助けていただければ幸いです。おかげ

+1

表2の最初の行が存在しなかった場合の結果はどうなりますか? – Blorgbeard

+1

つまり、date =(最近のテーブル)またはrows = date(そのnumの最新)の行を探していますか? – Blorgbeard

+0

@ Blorgbeard私はtable2の行を探していますが、date =そのnumの最新の行です。 – nvarchar

答えて

2

あなたが個別に各TABLE1のnumの最新の日付をしたい場合:

with maxdates as (
    select T1.num, max(T2.date) as date 
     from table2 T2 
     join table1 T1 
     on T2.num = t1.num 
    group by T1.num 
) 
select t2.num, t2.date, t2.amount 
    from table2 T2 
    join maxdates M 
    on T2.num = M.num 
    and T2.date = M.date 

たり、テーブル内のすべての一致するレコードのための最新の日付をしたい場合:

with maxdate as (
    select max(T2.date) as date 
     from table2 T2 
     join table1 T1 
     on T2.num = t1.num 
) 
select t2.num, t2.date, t2.amount 
    from table2 T2 
    join table1 T1 
    on T2.num = T1.num 
    join maxdate M 
    on T2.date = M.date 
+0

ありがとうございます。トリックをするようだ – nvarchar

2

はこれを試してみてくださいクエリ:

SELECT b.* 
    FROM Table1 a INNER JOIN 
       (
     SELECT a.*, 
       ROW_NUMBER() OVER(PARTITION BY a.Num ORDER BY Date DESC) rnk 
      FROM Table2 a 
     ) b 
     ON a.Num = b.Num 
     AND rnk = 1 
0

この

をお試しください
select t2.* from table2 as t2 inner join table1 as t1 on t2.num=t2.num 
inner join 
(
Select t2.num,max(t2.amount) as amount from table2 
group by t2.num 
) as t3 on t2.amount=t3.amount 
0
DECLARE @t1 TABLE(num INT) 
DECLARE @t2 TABLE(num INT, [date] NVARCHAR(5), amount INT) 

INSERT INTO @t1 (num) VALUES (1),(2),(3) 

INSERT INTO @t2 (num,[date],amount) VALUES (1,'12/31',30) 
INSERT INTO @t2 (num,[date],amount) VALUES (1,'12/30',31) 
INSERT INTO @t2 (num,[date],amount) VALUES (1,'12/29',20) 
INSERT INTO @t2 (num,[date],amount) VALUES (2,'12/31',100) 
INSERT INTO @t2 (num,[date],amount) VALUES (2,'12/30',90) 
INSERT INTO @t2 (num,[date],amount) VALUES (3,'12/31',12) 
INSERT INTO @t2 (num,[date],amount) VALUES (4,'11/01',1) 

SELECT t2.num,t2.[date],amount 
FROM @t1 t1 JOIN @t2 t2 ON t1.num = t2.num 
WHERE t2.[date] in (
         SELECT MAX(t3.[date]) 
         FROM @t2 t3 
         WHERE t3.num = t2.num 
        ) 
ORDER BY t2.num 
関連する問題