souvikcode Ответов: 2

Как написать запрос в SQL для следующей проблемы


uniqueid visitid pregnancyNo progress
1        8       1           p1
2        8       1           p2
3        8       2           p3
4        9       1           p4
5        9       1           p5
6        9       3           p6


Нет я хочу результат как
<pre lang="C#">
uniqueid visitid pregnancyNo progress
3        8       2           p3
4        9       1           p4
5        9       1           p5
6        9       3           p6
</pre>


Это означает, что та же самая беременность, имеющая более низкий идентификатор посещения, не будет взята. Но беременность 2 имеет более низкий визит, но это не в верхнем визите 9,поэтому его принимают.
А беременность 3 полностью нова в визите 9, так что ее явно приняли.
Просто беременность 1 удаляется, потому что она присутствует в визите 9.

Что я уже пробовал:

Я не мог ничего попробовать, потому что не могу написать алгоритм этой задачи.

2 Ответов

Рейтинг:
16

pparya27

Я вставил ваши записи в "tmp_table"стол, и достиг желаемого результата двумя способами :


Запрос 1:

select a.*
from tmp_table a, (select pregnancyno,max(visitid) as visitid from tmp_table group by pregnancyno) b
where a.pregnancyno=b.pregnancyno and a.visitid=b.visitid
order by a.uniqueid;



Запрос 2:
select a.* from tmp_table a where a.visitid in 
(select max(visitid) from tmp_table b where a.pregnancyno=b.pregnancyno)
order by a.uniqueid;



Наслаждайтесь !!


Maciej Los

Сохранить форматирование текста!

souvikcode

Кто ты босс. Его чудесный чемпион. Вы играли с self join, и это сделало свое дело. Действительно прекрасный.

pparya27

Спасибо, брат! Приятно это слышать.

souvikcode

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

pparya27

я не читал много книг. просто используйте интернет в своих интересах.
несколько раз я обращаюсь к следующему сайту :
https://www.techonthenet.com/oracle/index.php

souvikcode

Спасибо.