Как выполнить следующее требование с помощью SQL-запроса - PullRequest
0 голосов
/ 04 января 2019
  TABLE1               TABLE2
ID   DATE             ID   NAME
1    1 JAN            1    ABC
2    2 JAN            2    ABC
3    3 JAN            3    CDF
4    4 JAN            4    CDF

выполните группировку по таблице 2, чтобы id = 1,2 и 3,4 сформировали 2 группы, поскольку 1,2 имеет NAME в качестве ABC и так далее. Эти 2 набора с id = 1,2 и 3,4 будут объединены с TABLE1 с id в качестве общего фактора для поиска минимальной даты среди id = 1,2 и id = 3,4 так что конечный результат должен быть таким:

ID   DATE    
1   1 JAN 
3   3 JAN

enter image description here

Ответы [ 5 ]

0 голосов
/ 04 января 2019

дб-скрипка

select id, date
  from table1
 where dt in (select min(date)
                from table1 A
                     left join table2 B
                            on A.id = B.id
               group by name)
0 голосов
/ 04 января 2019

Требуется одна строка результатов для имени, поэтому группа по имени:

select
  min(t2.id) as id,
  min(t1.date) as date
from table1 t1
join table2 t2 on t2.id = t1.id
group by t2.name
order by min(t2.id);
0 голосов
/ 04 января 2019

вы можете использовать просто присоединиться

select t1.id,t1.date from
 table1 t1 join
(select min(ID) as id,name from
 table2
 group by name
) t2
  on t1.id=t2.id
0 голосов
/ 04 января 2019

Обычно вы делаете это с join и group by:

select t2.name, min(t2.date)
from table1 t1 join
     table2 t2
     on t1.id = t2.id
group by t2.name;

Такой запрос не требует ни подзапроса, ни CTE.

0 голосов
/ 04 января 2019

В одну сторону, используя ROW_NUMBER:

WITH cte AS (
    SELECT t1.ID, t1.DATE,
        ROW_NUMBER() OVER (PARTITION BY t2.NAME ORDER BY t2.ID) rn
    FROM TABLE1 t1
    INNER JOIN TABLE2 t2
        ON t1.ID = t2.ID
)

SELECT ID, DATE
FROM cte
WHERE rn = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...