2013-10-01 2 views
0

Мне нужно создать представление из таблицы, которое должно содержать только самые новые элементы из набора дубликатов. Это непростая задача, но проблема в том, что таблица не нормализована. Каждая запись идентифицируется тремя строковыми столбцами: Транспондер, Страна и Система. Я не могу внести никаких изменений в структуру базы данных. Новые элементы должны быть возвращены на основе столбца Time. Так, имеющие такие данные:SQL View возвращает отфильтрованные данные из ненормализованной таблицы

Transponder | Country | System | Time 
-------------------------------------------- 
AAA   | BBB  | CCC  | 2012-01-01 
AAA   | BBB  | CCC  | 2010-01-01 
AAA   | BBB  | CCC  | 2013-01-01 
AAA   | BAB  | DDD  | 2011-01-01 
AAA   | BAB  | DDD  | 2010-01-01 

Я хочу, чтобы мой взгляд, чтобы вернуть только две строки:

AAA   | BBB  | CCC  | 2013-01-01 
AAA   | BAB  | DDD  | 2011-01-01 

Как я могу добиться этого? Я использую Postgresql 9.2.

ответ

2
select distinct on (transponder, country, system) * from some_table 
order by transponder, country, system, time desc 
1

выбрать транспондер, страну, систему max (время) из группы TABLE транспондером, страной, системой;

Это даст вам отчетливое запись агрегированных по сгруппированных записей (транспондер, страну, систему для агрегированного столбца (в данном случае время).

0

Postgre это не мое дело, но это выглядит так же, как группа по проблеме SQL заявление:.

SELECT transponder, country, system, MAX(time) 
    FROM your_table 
GROUP BY transponder, country, system 
; 
0

Вы можете использовать ...

SELECT Transporter , 
     Country , 
     [System] , 
     [TIME] 
FROM (SELECT Transporter , 
        Country , 
        [System] , 
        [TIME] , 
        RANK() OVER (PARTITION BY Transporter, Country, [System] ORDER BY [TIME] DESC) AS [order] 
      FROM  tableName 
     ) AS a 
WHERE a.[order] = 1 

мне нужно перепроверить синтаксис PostgresSQL хотя

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