2016-09-13 5 views
0

У меня есть 2 таблицы так:SQL - Как выбрать строку, сравнить даты из 2 таблицы

Table1:

ID | COMPANY_NAME | Rank | FIRST_REGIST_DATE 

    1   A   1   2017-09-01 
    2   B   2   2017-09-05 

Таблица 2:

ID | COMPANY_NAME | RANK | FIRST_REGIST_DATE 
1   A   3   2017-09-03 
2   C   4   2017-09-04 

I необходимо выбрать компанию с данными FIRST_REGIST_DATE и RANK В случае, если у компании есть 2 первых регистра ели, мы выбираем более раннюю дату и RANK больше (EX: компания А выше будет первая дата: 2017-09-01)

Expect результат нравится: Компания A - Уровень 3 - Дата: 2017-09-01

Пожалуйста, мне выбрать в этом случае

+1

Каков ваш ожидаемый результат? –

+0

Извините, парень, я обновил ответ. –

+0

Что предпочитает 'FIRST_REGIST_DATE' или' RANK'? то есть. Компания B & C имеет одинаковый идентификатор. B имеет более позднюю дату, но более высокий ранг, чем C. Что вы ожидаете увидеть первым? –

ответ

1

Это технически отвечает на вопрос, но избегает слона в комнате (какой идентификатор предпочитает?). Поскольку обе таблицы имеют идентификаторы, которые могут перекрываться ({B, C} имеют идентификатор 2), правила должны быть определены в отношении того, какой идентификатор предпочитает, для чего будет переименован другой идентификатор таблицы.

Select COMPANY_NAME 
      ,MIN(FIRST_REGIST_DATE) as REGIST_DATE 
    from (
      SELECT * 
      FROM #table1 
      UNION ALL 
      SELECT * 
      FROM #table2 
    ) t3 
    Group by COMPANY_NAME 

ОП не меняйте свой вопрос (добавив RANK) после того, как на вопрос был дан ответ. За ваши изменения: любезно внесен @toha

Select COMPANY_NAME 
      ,MIN(FIRST_REGIST_DATE) as REGIST_DATE 
      ,MAX(RANK) as RANK 
    from (SELECT * 
      FROM #table1 
      UNION ALL 
      SELECT * 
      FROM #table2) t3 
    Group by COMPANY_NAME 
+0

Спасибо за указание, что ID как другой, я соответственно изменю свой ответ. –

+0

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

+0

Благодарим вас за идею. Но, похоже, это моя ошибка, я был упущен в вопросе. Я только что добавил результат ожидания. Извините за убеждение :( –

1

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

SELECT company_name, MIN(fisrt_regist_date) 
(
SELECT company_name, fisrt_regist_date 
FROM table1 
UNION ALL 
SELECT company_name, fisrt_regist_date 
FROM table2 
) tab1 
FROM tab1 
GROUP BY company_name 

Этот запрос будет объединять результаты первой таблицы и второй таблицы, а затем показать вам подробную информацию о компании вместе с самой ранней датой регистрации.

+0

вы можете использовать UNION вместо UNION ALL, так как вам не нужны все доступные записи, чтобы выполнить эту операцию, и ответ правильный, как и в моем понимании. – Susang

+0

Идеальное решение, если компания B также находится в Таблице 2 (там, где она смотрит, хотя ей будет присвоен идентификатор, отличный от «2»), и в этом случае будет дублирование из-за компаний, имеющих несколько идентификаторов. –

+0

@Suraz UNION является дорогостоящим с точки зрения производительности по сравнению с UNION ALL. –

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