TSQL-запрос для получения сведений о строке таблицы, имеющей максимальное значение для столбца - PullRequest
2 голосов
/ 03 января 2011

У меня есть две таблицы.

Таблица 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

Теперь мой результат должен иметь

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

(для значений 'Num' в таблице 1 объедините с таблицей 2, где дата является самой последней)

Я пытаюсь написать запрос tsql для достижения этой цели.

Любая помощь приветствуется.Спасибо

Ответы [ 4 ]

2 голосов
/ 03 января 2011

Попробуйте этот запрос:

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
2 голосов
/ 03 января 2011

Если вы хотите, чтобы самая последняя дата для каждой таблицы1 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 голосов
/ 03 января 2011
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
0 голосов
/ 03 января 2011

Попробуйте это

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...