2013-12-05 6 views
0

У меня есть таблицаПолучить первое значение

ID  VALUE  DATE 
1  2   1.1.2013 
1  3   1.9.2013 
1  3   1.4.2013 
2  1   1.1.2013 
2  1   1.2.2013 
3  3   1.3.2013 
3  1   1.4.2013 
3  3   1.5.2013 

мне нужно получить только первое значение для идентификатора и только одну строку для каждого идентификатора.

Я стараюсь это выбрать:

SELECT ID, 
     first_value(VALUE) over(PARTITION BY id ORDER BY DATE) f_value, 
     first_value(DATE) over(PARTITION BY id ORDER BY DATE) f_date 
FROM table1 
GROUP BY ID 

Но я не могу использовать GROUP BY с FIRST_VALUE.

+0

Первое значение в вашем случае означает значение с самой ранней датой? – Armunin

+0

Да. Нужно быть первым упорядоченным по порядку по дате группой по id –

+0

Я думаю, вам нужно 'MIN (VALUE)', 'MIN (DATE)', если вы хотите вернуть одну строку на id –

ответ

1
SELECT DISTINCT ID, 
    first_value(VALUE) over(PARTITION BY id ORDER BY DATE) f_value, 
    first_value(DATE) over(PARTITION BY id ORDER BY DATE) f_date 
FROM table1 

Вам не нужна GROUP BY, потому что в функции OVER уже есть группа и порядок.

+0

Вот почему я поместил ключевое слово DISTINCT. Без него у вас будет одна и та же запись за один ID –

+1

Жаль, не видел DISTINCT. благодаря –

0
SELECT ID,VALUE,DATE 
FROM 
--inline view will return the min date for each group based on ID 
(
    SELECT ID, 
      value, 
      date, 
      MIN(DATE) over(PARTITION BY id) f_date 
    FROM table1 
) 
WHERE f_date=date; --compare the date and fetch the row with min date 
Смежные вопросы