powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с выборкой уникальных строк
7 сообщений из 7, страница 1 из 1
Помогите с выборкой уникальных строк
    #39303689
bobtnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. FB 2.5
Есть таблица:

id: INTEGER
object_id: INTEGER
time:TIMESTAMP
data: INTEGER

Допустим имеем следующие данные:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
id  | object_id | time       | data
...
10  | 3         | 04.04.2016 | 111
09  | 2         | 05.04.2016 | 222
08  | 3         | 06.04.2016 | 333 << object_id № 3 с самой поздней датой
07  | 3         | 03.04.2016 | 111
06  | 2         | 10.04.2016 | 222
05  | 1         | 11.04.2016 | 555
04  | 2         | 15.04.2016 | 666 << object_id № 2 с самой поздней датой
03  | 1         | 20.04.2016 | 777 << object_id № 1 с самой поздней датой
...

Результат выборки должен содержать только строки с уникальными object_id у которых содержатся самые поздние даты:
Код: plaintext
1.
2.
3.
4.
id  | object_id | time       | data
08  | 3         | 06.04.2016 | 333
04  | 2         | 15.04.2016 | 666
03  | 1         | 20.04.2016 | 777

Пока что сделал в лоб через процедуру:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE OR ALTER PROCEDURE PROC_GET_DATA(datetime_begin TIMESTAMP, datetime_end TIMESTAMP)
RETURNS (id INTEGER, object_id INTEGER, datetime TIMESTAMP, data INTEGER)
AS
DECLARE VARIABLE object_id_temp INTEGER;
BEGIN
object_id_temp = 0;
FOR select ID, OBJECT_ID, TIME, DATA, from MY_TAB where
               (TIME between :datetime_begin and :datetime_end)
               order by OBJECT_ID,TIME desc
               into :id, :object_id, :datetime, :data do
               begin
                    if (object_id_temp <> object_id) then
                    begin
                           SUSPEND;
                           object_id_temp = object_id;
                    end
               end
END

Все работает, но как сами понимаете при больших количествах данных выполнение цикла может затянуться...
Может кто подскажет как сделать выборку одним sql выражением?
Спасибо!
...
Рейтинг: 0 / 0
Помогите с выборкой уникальных строк
    #39303704
AnSi_Sr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bobtnt,
Поскольку аналитических функций нет , то через подзапрос максимальной даты.
...
Рейтинг: 0 / 0
Помогите с выборкой уникальных строк
    #39303729
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnSi_Srbobtnt,
Поскольку аналитических функций нет , то через подзапрос максимальной даты.
А мой гугл говорит, что есть .
...
Рейтинг: 0 / 0
Помогите с выборкой уникальных строк
    #39303732
AnSi_Sr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonline,

Да, Вы абсолютно правы.
Мой гугл разговаривает с учетом:
bobtntДобрый день. FB 2.5
...
Рейтинг: 0 / 0
Помогите с выборкой уникальных строк
    #39303772
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bobtnt, посмотрите вот эту тему - http://www.sql.ru/forum/1227840/uslovie-vyborki. Я там предлагал вариант. По-моему у Вас очень похоже.
...
Рейтинг: 0 / 0
Помогите с выборкой уникальных строк
    #39303778
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnSi_Srmiwaonline,

Да, Вы абсолютно правы.
Мой гугл разговаривает с учетом:
bobtntДобрый день. FB 2.5

Ваша правда, не заметил версию в стартовом посте.
...
Рейтинг: 0 / 0
Помогите с выборкой уникальных строк
    #39303822
rstrelba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
select 
x0.object_id,
(select first 1 z0.time from MY_TAB z0 where z0.object_id=x0.object_id order by z0.time DESC) as time,
(select first 1 z0.data from MY_TAB z0 where z0.object_id=x0.object_id order by z0.time DESC) as data
from MY_TAB x0
group by x0.object_id
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с выборкой уникальных строк
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]