Максимальная проблема с датой в объединенной таблице - PullRequest
1 голос
/ 16 марта 2011

Для примера используйте дату: 03-16-2011 как сегодняшнюю дату

запись таблицы: record_id, record_status, record_submitted_date

таблица record_change_log: change_log_id, record_id, new_record_status, record_change_date, old_record_status

(будет иметь только один record_id) данные записи таблицы:

1, key, 2011-03-14 08:24:12.04051-04
2, manual, 2011-03-15 09:56:32.04051-04
3, entered, 2011-03-16 07:44:01.04051-04

(будет иметь несколько записей record_id и record_change_date) таблица record_change_log:

100, 3, entered, 2011-03-16 09:54:01.04051-04, ''
101, 3, updated, 2011-03-16 09:55:01.04051-04, entered
102, 2, manual, 2011-03-15 09:56:32.04051-04, ''
103, 3, valid, 2011-03-16 10:00:01.04051-04, updated
104, 2, updated, 2011-03-15 10:01:51.04051-04, manual
105, 3, returned, 2011-03-16 10:11:22.04051-04, valid
106, 1, updated, 2011-03-16 11:11:11.04051-04, key
107, 23, manual, ...
108, 100, test, ...

Что мне нужно, так этовернуть все record_id ежедневно с последним внесенным журналом изменений.Таким образом, record_id 1 вернется:

106, 1, updated, 2011-03-16 11:11:11.04051-04, key

, и record_id 2 не будет возвращен, поскольку дата не сегодня:

104, 2, updated, 2011-03-15 10:01:51.04051-04, manual

и record_id 3 вернется:

105, 3, returned, 2011-03-16 10:11:22.04051-04, valid

Но в запросе мне нужны только возвращенные record_id и new_record_status, которые изменились с сегодняшней датой, поэтому record_id 2 не будет возвращен в результатах, а 1 и 3.

Теперь другая частьзапрос состоит в том, что мне нужны только идентификаторы record_id, которые находятся в таблице записей, поэтому эти другие записи в таблице журнала изменений также не будут возвращены:

107, 23, manual, ...
108, 100, test, ...

Таким образом, желаемые результаты, так как это последние записив таблице журнала изменений, а также они являются записями в таблице записей:

105, 3, returned, 2011-03-16 10:11:22.04051-04, valid
106, 1, updated, 2011-03-16 11:11:11.04051-04, key

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

Ответы [ 2 ]

1 голос
/ 16 марта 2011

Вы можете присоединиться к коррелированному подзапросу, например, ...

SELECT
  *
FROM
  record
INNER JOIN
  record_change_log
    ON record_change_log.change_log_id = (
      SELECT
        change_log_id
      FROM
        record_change_log
      WHERE
        record_id = record.record_id
      ORDER BY
        record_change_date DESC
      LIMIT
        1
    )

(я оставил вам «только сегодня» части, так как я думаю, что «только одна запись изжурнал изменений "- это та часть, по которой вам нужна помощь.)

0 голосов
/ 16 марта 2011
--
-- Pull today's most recent change log entries for every known "record_id",
-- if any.
--
SELECT *
  FROM record_change_log
 INNER JOIN (
             -- Find the timestamp of the most recent change log entry
             -- for each known "record_id" (in the "record" table),
             -- which change occurred today.
             SELECT record_id,
                    max(record_change_date) as changed
               FROM record_change_log
              INNER JOIN
                    record USING (record_id)
              WHERE record_change_date::DATE = CURRENT_DATE
              GROUP BY 1
            ) most_recent ON most_recent.record_id = record_change_log.record_id
                             AND
                             record_change_date = most_recent.changed;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...