2013-07-30 2 views
2

является новичком пользователя:Twice Inner Присоединиться к одному и тому же столу со встроенной функцией

У меня есть простая таблица, в которой хранятся некоторые записи за ночь в день. Таблица:

Таблица: T1

+----+-----+----+-----------+------------+ 
| Id | A | AB | Value | Date | 
+----+-----+----+-----------+------------+ 
| 1 | abc | I | -48936.08 | 2013-06-24 | 
| 2 | def | A | 431266.19 | 2013-06-24 | 
| 3 | xyz | I | -13523.90 | 2013-06-24 | 
| 4 | abc | A | 13523.90 | 2013-06-23 | 
| 5 | xyz | I | -13523.90 | 2013-06-23 | 
| 6 | def | A | 13523.90 | 2013-06-22 | 
| 7 | def | I | -13523.90 | 2013-06-22 | 
+----+-----+----+-----------+------------+ 

Я хотел бы получить все значения столбцов A, AB, значение для последней даты на колонке фильтруется на AB = I

в основном результат должен выглядят так:

+----+-----+----+-----------+------------+ 
| Id | A | AB | Value | Date | 
+----+-----+----+-----------+------------+ 
| 1 | abc | I | -48936.08 | 2013-06-24 | 
| 3 | xyz | I | -13523.90 | 2013-06-24 | 
| 7 | def | I | -13523.90 | 2013-06-22 | 
+----+-----+----+-----------+------------+ 

Я попытался использовать внутреннее соединение дважды в одной таблице, но не смог найти правильный результат.

любая помощь будет оценена.

спасибо :)

ответ

3

Это будет работать с SQLServer 2005+

;WITH a as 
(
SELECT id, A,AB, Value, Date 
, row_number() over (partition by A order by Date desc) rn 
FROM t1 
WHERE AB = 'I' 
) 
SELECT id, A,AB, Value, Date 
FROM a WHERE rn = 1 
+0

Благодарения и это все. – SWKK

3
; WITH x AS (
    SELECT id 
     , a 
     , ab 
     , "value" 
     , "date" 
     , Row_Number() OVER (PARTITION BY a ORDER BY "date" DESC) As row_num 
    FROM your_table 
    WHERE ab = 'I' 
) 
SELECT * 
FROM x 
WHERE row_num = 1 
+0

О, дорогой, слишком медленный, был избит тем же самым ответом! Что это за сетевой наименования? Должен ли я удалить свой пост? – gvee

Смежные вопросы