ВЫБЕРИТЕ с условиями для льготного источника - PullRequest
2 голосов
/ 27 февраля 2010

У меня есть запрос, который я использовал некоторое время, однако у меня есть новый сценарий, который я не знаю, как обработать. Приведенный ниже запрос извлекает средние цены из таблицы, называемой доступными. У меня сейчас проблема в том, что данные, содержащиеся в этой таблице, могут быть получены из одного из двух источников. Поэтому я добавил поле источника в таблицу.

Проблема в том, что один или оба из этих источников для любой записи могут быть пустыми, что нормально, или они могут содержать данные для той же записи (что является моей проблемой). Записи, как правило, уникальны, за исключением новых альтернативных источников.

IE

Room Date        Price   Source
27   2010-02-28  $27.99  1
27   2010-02-28  $25.99  2

Мне нужен один экземпляр, чтобы запрос извлекал только первый источник и игнорировал второй, но только если они оба существуют.

SELECT 
    rooms.id, 
    name, 
    ppl, 
    private AS exclusive, 
    MIN(spots) AS spots, 
    AVG(availables.price) AS price FROM "rooms" 
INNER JOIN 
    "availables" ON availables.room_id = rooms.id 
WHERE 
    (("rooms".hostel_id = 6933) AND 
     (rooms.active IS true AND bookdate BETWEEN '2011-02-20' AND '2011-02-22')) 
GROUP BY 
    rooms.id, name, ppl, private ORDER BY price

Ответы [ 2 ]

2 голосов
/ 27 февраля 2010
SELECT  *
FROM    rooms
JOIN    (
        SELECT  DISTINCT ON (room_id, date) *
        FROM    availables
        ORDER BY
                room_id, date, source
        ) a
ON      a.room_id = rooms.id
WHERE   …
2 голосов
/ 27 февраля 2010

добавить подзапрос, например:

inner join
  (select Room, Date, min(Source) as Source
  from availables
  group by Room, Date) first_available
on first_available.Room = available.Room
    and first_available.Date = available.Date
    and first_available.Source = available.Source
...