Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Несколько записей на одного человека, выбрать именно первую.  [new]
Shaka007
Member

Откуда:
Сообщений: 20
Есть таблица типа

idNameTypeemployee
10BobaEmp22
10BobaEmp10
66BenaEmp43
78LeoaEmp32


Вопрос состоит в следующем, если записи на одном человеке больше одной (как у Bob) выводить именно первую. Как это можно реализовать попроще и возможно есть подходящие функции?
Спасибо!
5 окт 12, 18:38    [13276036]     Ответить | Цитировать Сообщить модератору
 Re: Несколько записей на одного человека, выбрать именно первую.  [new]
semenar
Member

Откуда: Днепропетровск
Сообщений: 3308
Блог
первую по ID?
5 окт 12, 18:41    [13276049]     Ответить | Цитировать Сообщить модератору
 Re: Несколько записей на одного человека, выбрать именно первую.  [new]
semenar
Member

Откуда: Днепропетровск
Сообщений: 3308
Блог
semenar
первую по ID?

Не гланул, что ключ неунекален. Но это не снимает вопроса.
5 окт 12, 18:42    [13276056]     Ответить | Цитировать Сообщить модератору
 Re: Несколько записей на одного человека, выбрать именно первую.  [new]
K790
Member

Откуда:
Сообщений: 634
Shaka007,

критерии определения первой записи есть какие-то ?
5 окт 12, 18:50    [13276080]     Ответить | Цитировать Сообщить модератору
 Re: Несколько записей на одного человека, выбрать именно первую.  [new]
Максим Н
Member

Откуда: Екатеринодар
Сообщений: 1439
Shaka007,

https://www.sql.ru/forum/actualthread.aspx?tid=973987
5 окт 12, 18:54    [13276092]     Ответить | Цитировать Сообщить модератору
 Re: Несколько записей на одного человека, выбрать именно первую.  [new]
Shaka007
Member

Откуда:
Сообщений: 20
semenar , можно вопрос конкретней? Не понимаю, что именно Вы хотите услышать.
Про id могу пояснить следующее..
idName..
10Bob...
10Bob...
20Ben...
20Ben...
33Leo...
33Leo...
5 окт 12, 18:56    [13276095]     Ответить | Цитировать Сообщить модератору
 Re: Несколько записей на одного человека, выбрать именно первую.  [new]
Shaka007
Member

Откуда:
Сообщений: 20
Максим Н ,
она по порядку первая, другого критерия нет, те нам из таблицы с примером нужны все записи кроме второй строки
5 окт 12, 19:01    [13276104]     Ответить | Цитировать Сообщить модератору
 Re: Несколько записей на одного человека, выбрать именно первую.  [new]
order by
Guest
Shaka007
... она по порядку первая, другого критерия нет ...


Офигенный критерий (извините). А если она вернет так?

id Name ..
20 Bob ...
10 Bob ...
20 Ben ...
10 Ben ...

То что? Нужен критерий для определения первой записи, иначе каждый раз будет что -то новое а это не очень хорошо.
5 окт 12, 19:45    [13276238]     Ответить | Цитировать Сообщить модератору
 Re: Несколько записей на одного человека, выбрать именно первую.  [new]
ksv55
Member

Откуда:
Сообщений: 93
Shaka007
Есть таблица типа

idNameTypeemployee
10BobaEmp22
10BobaEmp10
66BenaEmp43
78LeoaEmp32


Вопрос состоит в следующем, если записи на одном человеке больше одной (как у Bob) выводить именно первую. Как это можно реализовать попроще и возможно есть подходящие функции?
Спасибо!

Записи в реалиционной базе данных неупорядочены по определению.
Для получения упорядоченности в оракле используют последовательности(SEQUENCE).

В твоем случае может сойдет такой запрос, отбирающий записи с минимальным внутренним идентификатором записи:
SELECT * FROM tbl t1 where rowid in (SELECT MIN(rowid) FROM TBL t2 WHERE t2.id=t1.id)
или отбирающий у записей с одинаковым ключем запись с минимальным значением employee
SELECT * FROM tbl t1 where t1.employee in (SELECT MIN(t2.employee) FROM TBL t2 WHERE t2.id=t1.id)
5 окт 12, 20:36    [13276369]     Ответить | Цитировать Сообщить модератору
 Re: Несколько записей на одного человека, выбрать именно первую.  [new]
ksv55
Member

Откуда:
Сообщений: 93
ksv55,
реалиционной реляционной
5 окт 12, 20:40    [13276375]     Ответить | Цитировать Сообщить модератору
 Re: Несколько записей на одного человека, выбрать именно первую.  [new]
stax..
Guest
ksv55
Shaka007
Есть таблица типа

idNameTypeemployee
10BobaEmp22
10BobaEmp10
66BenaEmp43
78LeoaEmp32


Вопрос состоит в следующем, если записи на одном человеке больше одной (как у Bob) выводить именно первую. Как это можно реализовать попроще и возможно есть подходящие функции?
Спасибо!

Записи в реалиционной базе данных неупорядочены по определению.
Для получения упорядоченности в оракле используют последовательности(SEQUENCE).

В твоем случае может сойдет такой запрос, отбирающий записи с минимальным внутренним идентификатором записи:
SELECT * FROM tbl t1 where rowid in (SELECT MIN(rowid) FROM TBL t2 WHERE t2.id=t1.id)


про последовательности оригинальная версия
если вьюшка то ровидов может и не быть, если уникальные ровиды есть, я б in заменил на =, или убрал кореляцию

ksv55
или отбирающий у записей с одинаковым ключем запись с минимальным значением employee
SELECT * FROM tbl t1 where t1.employee in (SELECT MIN(t2.employee) FROM TBL t2 WHERE t2.id=t1.id)

а если с минимальным значением employee больше одной записи?


2 Shaka007, какая из записей
10 Bob a Emp22
10 Bob a Emp10

первая и почему?

.....
stax
6 окт 12, 12:13    [13277463]     Ответить | Цитировать Сообщить модератору
 Re: Несколько записей на одного человека, выбрать именно первую.  [new]
ksv55
Member

Откуда:
Сообщений: 93
stax..,

В исходной постановке задача решения не имеет, но для таблиц запрос вида
SELECT * FROM tbl t1 where rowid in (SELECT MIN(rowid) FROM TBL t2 WHERE t2.id=t1.id)

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

"Упорядоченность" по какому то критерию, например по временной последовательности, вопрос предметной области и проектировщиков базы.
6 окт 12, 17:39    [13277829]     Ответить | Цитировать Сообщить модератору
 Re: Несколько записей на одного человека, выбрать именно первую.  [new]
Shaka007
Member

Откуда:
Сообщений: 20
stax.. ,
запись первая, тк была по времени и дате первая.
6 окт 12, 17:59    [13277850]     Ответить | Цитировать Сообщить модератору
 Re: Несколько записей на одного человека, выбрать именно первую.  [new]
-=APS=-
Member

Откуда: Киев
Сообщений: 737
автор
запись первая, тк была по времени и дате первая.
:) Ну, и где же "время и дата" в приведенной вами таблице? Они, видимо, известны только вам. И содержатся, видимо, в каком-то закоулке вашей памяти. Остается лишь выполнить join вашей памяти и данных таблицы. Без этого чёткий критерий "первая" у вас в таблице отсутствует.
6 окт 12, 18:25    [13277905]     Ответить | Цитировать Сообщить модератору
 Re: Несколько записей на одного человека, выбрать именно первую.  [new]
eev
Member

Откуда: -
Сообщений: 1156
Shaka007
Есть таблица типа

idNameTypeemployee
10BobaEmp22
10BobaEmp10
66BenaEmp43
78LeoaEmp32


Вопрос состоит в следующем, если записи на одном человеке больше одной (как у Bob) выводить именно первую. Как это можно реализовать попроще и возможно есть подходящие функции?
Спасибо!

Shaka007
Максим Н ,
она по порядку первая, другого критерия нет, те нам из таблицы с примером нужны все записи кроме второй строки

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

правильно формулируйте свой вопрос и пример для него
6 окт 12, 18:25    [13277906]     Ответить | Цитировать Сообщить модератору
 Re: Несколько записей на одного человека, выбрать именно первую.  [new]
Shaka007
Member

Откуда:
Сообщений: 20
Полное условие.

idNameTypeemployeedtime
10BobaEmp22 23.01.1999 12:30:12
10BobaEmp10 12.05.2000 18:50:30
11BenaEmp43 03.02.1999 17:50:00
12LeoaEmp32 16.08.2000 20:40:20

Вопрос состоит в следующем, если записи на одном человеке больше одной (как у Bob) выводить именно первую.
7 окт 12, 09:44    [13279657]     Ответить | Цитировать Сообщить модератору
 Re: Несколько записей на одного человека, выбрать именно первую.  [new]
aars
Member

Откуда:
Сообщений: 263
Shaka007
Вопрос состоит в следующем, если записи на одном человеке больше одной (как у Bob) выводить именно первую.


чем
order by id, dtime
не устраивает?
Может ещё where rownum<2 понадобится

PS. чем дальше, тем маразматичнее веселее.
7 окт 12, 11:02    [13279723]     Ответить | Цитировать Сообщить модератору
 Re: Несколько записей на одного человека, выбрать именно первую.  [new]
AmKad
Member

Откуда:
Сообщений: 5222
Shaka007,

select * 
from 
 (select t.*, row_number() over (partition by id order by dtime) rn
  from t
 )
where rn = 1;
7 окт 12, 11:03    [13279726]     Ответить | Цитировать Сообщить модератору
 Re: Несколько записей на одного человека, выбрать именно первую.  [new]
чем_бы_дитя_не_мучилось
Guest
Shaka007
Полное условие.

idNameTypeemployeedtime
10BobaEmp22 23.01.1999 12:30:12
10BobaEmp10 12.05.2000 18:50:30
11BenaEmp43 03.02.1999 17:50:00
12LeoaEmp32 16.08.2000 20:40:20

Вопрос состоит в следующем, если записи на одном человеке больше одной (как у Bob) выводить именно первую.


Shaka007, план действий для тебя, этакий roadmap, следующий:

- оканчиваем старшую группу детского сада
- поступаем в школу учимся там писать изложения, сочинения, правильно формулировать вопросы до 5 слов
- поступаем в институт, уимся там правильно формулировать вопросы до 10 слов
- заканчиваем курсы по SQL и PL/SQL
- больше не задаем глупых вопросов
7 окт 12, 11:05    [13279729]     Ответить | Цитировать Сообщить модератору
 Re: Несколько записей на одного человека, выбрать именно первую.  [new]
Shaka007
Member

Откуда:
Сообщений: 20
AmKad , aars, ksv55 , K790, Максим Н…
Ребята всем Вам спасибо за отклик!
А гость 'чем_бы_дитя_не_мучилось' муфлон закомплексованный в связи, с чем имеет право нажать на кнопочку «Сообщить модератору».
7 окт 12, 19:07    [13280776]     Ответить | Цитировать Сообщить модератору
 Re: Несколько записей на одного человека, выбрать именно первую.  [new]
semenar
Member

Откуда: Днепропетровск
Сообщений: 3308
Блог
Shaka007
AmKad , aars, ksv55 , K790, Максим Н…
Ребята всем Вам спасибо за отклик!
А гость 'чем_бы_дитя_не_мучилось' муфлон закомплексованный в связи, с чем имеет право нажать на кнопочку «Сообщить модератору».

ты ничего не понял, от этого неправильное ерагирование.
7 окт 12, 19:44    [13280858]     Ответить | Цитировать Сообщить модератору
 Re: Несколько записей на одного человека, выбрать именно первую.  [new]
Bassaev
Member

Откуда:
Сообщений: 69
Shaka007
Полное условие.

idNameTypeemployeedtime
10BobaEmp22 23.01.1999 12:30:12
10BobaEmp10 12.05.2000 18:50:30
11BenaEmp43 03.02.1999 17:50:00
12LeoaEmp32 16.08.2000 20:40:20

Вопрос состоит в следующем, если записи на одном человеке больше одной (как у Bob) выводить именно первую.


select id,Name,Type,employee,min(dtime) frim TB
group by name
8 окт 12, 13:11    [13283937]     Ответить | Цитировать Сообщить модератору
 Re: Несколько записей на одного человека, выбрать именно первую.  [new]
AmKad
Member

Откуда:
Сообщений: 5222
Bassaev,

ORA-00979?
8 окт 12, 18:43    [13286691]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить