SQL: найти самое раннее вхождение строки в таблице на основе значений из нескольких таблиц - PullRequest
1 голос
/ 06 марта 2012

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

Я считаю, что это разновидность проблемы "наибольший по группе", которая возникаетв StackOverflow несколько раз в неделю.

Запрос выполняется к базе данных для рабочих билетов.Данные, которые мне нужны, распределены по многим таблицам, и я объединяю их в одну область для работы.В этом конкретном случае таблица обновления содержит несколько строк для определенного рабочего запроса.Я пытаюсь присоединить его к таблице заявок и получить только самую раннюю дату обновления для этой заявки, где идентификатор пользователя соответствует пользователю, связанному с заявкой, из таблицы пользователей.В основном я использую, когда user_id изменяется, чтобы определить, когда билет назначается конкретному пользователю.

UPDATE_TABLE

updateNumber            | user_id       | date          | ticket_number
11                       | 4586b03       | 2011-11-30    | 923479283
12                       | 6786t03       | 2011-11-30    | 923479283
13                       | 7986003       | 2011-12-02    | 923479283
14                       | 7986003       | 2011-12-03    | 923479283
15                       | 7986003       | 2011-12-04    | 923479283
16                       | 5838397       | 2011-10-02    | 391983247
17                       | 7986004       | 2012-01-03    | 663738223
18                       | 7986003       | 2011-08-04    | 391983247

Запрос:

select 
    min(TA.updated_at) as UpdateVal
from Tickets T 
inner join Users U on U.id = T.assigned_user_id 
inner join UserGroup AU on U.login = AU.[User]
inner join TicketUpdate TA  on TA.task_id = T.id
where
   TA.task_id = 923479283 and TA.user_id = 7986003

возвращает: 2011-12-02

Этот подход работает, когда я жестко кодирую task_id и user_id для конкретной строки, как указано выше.Однако, когда я заменяю T.id на 923479283 и U.id на 7986003, чтобы получить эту информацию для всех билетов, запрос ничего не возвращает.Я пробовал много разных решений, включая присоединение таблицы TicketUpdate к себе через псевдоним и так далее.

ПОМОГИТЕ!

1 Ответ

0 голосов
/ 06 марта 2012

Вам необходимо добавить эти столбцы на SELECT и GROUP BY:

select TA.task_id, TA.user_id, min(TA.updated_at) as UpdateVal
from Tickets T 
inner join Users U on U.id = T.assigned_user_id 
inner join UserGroup AU on U.login = AU.[User]
inner join TicketUpdate TA  on TA.task_id = T.id
GROUP BY TA.task_id, TA.user_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...