2013-07-12 5 views
0

Я написал следующий запрос, чтобы вернуть записи с последней датой.MAX aggregate function in sql server

select fs.company_id, max(fs.create_dt) as latestcreatedate 
from field_sale fs 
group by fs.company_id 
order by fs.company_id 

Запрос все работает нормально. Но мне нужно получить запись со всеми связанными с ней столбцами. Например, id, title, desc и т. Д.

Как получить записи с соответствующими столбцами?

ответ

2

пару способов сделать так:

-- 1. 
SELECT a.* 
FROM field_sale a 
INNER JOIN 
(
select fs.company_id, max(fs.create_dt) as latestcreatedate 
from field_sale fs 
group by fs.company_id 
)b 
ON b.company_id = a.company_id AND b.latestcreatedate = a.create_dt 
order by a.company_id; 

-- 2. 
SELECT b.* FROM 
( 
    SELECT a.* , ROW_NUMBER() 
    OVER (PARTITION BY a.company_id ORDER BY a.create_dt DESC) 
    AS rn 
    FROM field_sale a 
)b WHERE b.rn = 1 
ORDER BY company_id 
1
WITH t AS (
      SELECT fs.company_id, 
        fs.create_dt AS latestcreatedate, 
        id, 
        title, 
        etc, 
        ROW_NUMBER() OVER (PARTITION BY fs.company_id ORDER BY fs.create_dt DESC) AS rowNum 
      FROM  field_sale fs 
     ) 
SELECT t.company_id, 
     t.latestcreatedate, 
     t.id, 
     t.title, 
     t.etc 
FROM t 
WHERE t.rowNum = 1 
ORDER BY t.company_id