powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / PostgreSQL выборка из таблицы за текущий день и предыдущие дни
11 сообщений из 11, страница 1 из 1
PostgreSQL выборка из таблицы за текущий день и предыдущие дни
    #39661454
dimo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Есть таблица вида:
balance

id u_id balance last_update
1 1 200.0 2018-06-13 14:05:53.912926
2 2 402.0 2018-06-13 14:06:10.320864
3 3 454.0 2018-06-11 14:06:28.033877
4 3 2.0 2018-06-12 14:06:46.626941
5 1 223.0 2018-06-14 20:32:10.401517
6 2 404.0 2018-06-14 20:32:34.104873
7 3 25.2 2018-06-14 20:32:52.0759

Требуется:
построить выборку из таблицы
id u_id balance last_update
[последнее обновление баланса по пользователю]
[предпоследнее обновление баланса по пользователю, но не за то число, когда было обновление]
В итоге должно быть
1 1 200.0 2018-06-13 14:05:53.912926
2 2 402.0 2018-06-13 14:06:10.320864
4 3 2.0 2018-06-12 14:06:46.626941
5 1 223.0 2018-06-14 20:32:10.401517
6 2 404.0 2018-06-14 20:32:34.104873
7 3 25.2 2018-06-14 20:32:52.0759

Подскажите, пожалуйста, как это можно сделать одним запросом? Спасибо.
...
Рейтинг: 0 / 0
PostgreSQL выборка из таблицы за текущий день и предыдущие дни
    #39661717
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimoДобрый день. Есть таблица вида:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
balance

id	u_id	balance	last_update
1	1	200.0	2018-06-13 14:05:53.912926
2	2	402.0	2018-06-13 14:06:10.320864
3	3	454.0	2018-06-11 14:06:28.033877
4	3	2.0	2018-06-12 14:06:46.626941
5	1	223.0	2018-06-14 20:32:10.401517
6	2	404.0	2018-06-14 20:32:34.104873
7	3	25.2	2018-06-14 20:32:52.0759

Требуется:
построить выборку из таблицы
id u_id balance last_update
[последнее обновление баланса по пользователю]
[предпоследнее обновление баланса по пользователю, но не за то число, когда было обновление]
В итоге должно быть
Код: plaintext
1.
2.
3.
4.
5.
1	1	200.0	2018-06-13 14:05:53.912926
2	2	402.0	2018-06-13 14:06:10.320864
4	3	2.0	2018-06-12 14:06:46.626941
5	1	223.0	2018-06-14 20:32:10.401517
6	2	404.0	2018-06-14 20:32:34.104873
7	3	25.2	2018-06-14 20:32:52.0759

Подскажите, пожалуйста, как это можно сделать одним запросом? Спасибо.логика получения результирующего набора данных из исходного - совсем непонятна... Фраза " предпоследнее обновление баланса по пользователю, но не за то число, когда было обновление " вообще не поддается осмыслению
...
Рейтинг: 0 / 0
PostgreSQL выборка из таблицы за текущий день и предыдущие дни
    #39661777
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimo,

если решать в лоб, то должно получиться что-то типа такого:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select *
  from (
         select t.*
              , row_number() over(partition by u_id, last_update::date order by last_update desc) as rn
              , dense_rank() over(partition by u_id order by last_update::date) as dnsrnk
           from balance t
       ) v
 where dnsrnk <= 2
   and rn = 1



P.S.
решение не из быстрых.
...
Рейтинг: 0 / 0
PostgreSQL выборка из таблицы за текущий день и предыдущие дни
    #39661783
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Небольшая опечаточка... Вот так оно правильнее будет:
Щукина Аннаdimo,

если решать в лоб, то должно получиться что-то типа такого:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select *
  from (
         select t.*
              , row_number() over(partition by u_id, last_update::date order by last_update desc) as rn
              , dense_rank() over(partition by u_id order by last_update::date desc) as dnsrnk
           from balance t
       ) v
 where dnsrnk <= 2
   and rn = 1



P.S.
решение не из быстрых.
...
Рейтинг: 0 / 0
PostgreSQL выборка из таблицы за текущий день и предыдущие дни
    #39661907
dimo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Щукина Анна,

выдаёт, к сожалению не 6 строк, а 3 последних.
Ок, попробую сделать через хранимую процедуру.
...
Рейтинг: 0 / 0
PostgreSQL выборка из таблицы за текущий день и предыдущие дни
    #39661981
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimo,

данные, на которых пробовали запрос, показывайте... Ибо на ваших же тестовых данных из стартового топика запрос отрабатывает ровно пор той логике, что вы описали - выдает 6 строк с id 1,2,4,5,6,7.
...
Рейтинг: 0 / 0
PostgreSQL выборка из таблицы за текущий день и предыдущие дни
    #39661984
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimo,

а заодно - текст запроса, который катали. Особенно, если в него (относительно моей "оригинальной" версии) вносились правки...
...
Рейтинг: 0 / 0
PostgreSQL выборка из таблицы за текущий день и предыдущие дни
    #39662235
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина Аннаdimo,

данные, на которых пробовали запрос, показывайте... Ибо на ваших же тестовых данных из стартового топика запрос отрабатывает ровно пор той логике, что вы описали - выдает 6 строк с id 1,2,4,5,6,7.
В качестве подтверждения своих слов: sqlfiddle.com
...
Рейтинг: 0 / 0
PostgreSQL выборка из таблицы за текущий день и предыдущие дни
    #39662237
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то fiddle глючит в последнее время.
Или у вас ссылка битая. Не открывается.
...
Рейтинг: 0 / 0
PostgreSQL выборка из таблицы за текущий день и предыдущие дни
    #39662238
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открылось с третьего раза ….
...
Рейтинг: 0 / 0
PostgreSQL выборка из таблицы за текущий день и предыдущие дни
    #39662242
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183,

фиддл в последнее время очень нестабилен....

вот тест-кейс для запуска, если кто-то захочит проверить, а фиддл не откроется:
Немного кода
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
with bal (id, u_id, balance, last_update) as
  ( 
    select * 
      from (values
              (1, 1, 200.0, '2018-06-13 14:05:53.912926'::timestamp),
              (2, 2, 402.0, '2018-06-13 14:06:10.320864'::timestamp),
              (3, 3, 454.0, '2018-06-11 14:06:28.033877'::timestamp),
              (4, 3,   2.0, '2018-06-12 14:06:46.626941'::timestamp),
              (5, 1, 223.0, '2018-06-14 20:32:10.401517'::timestamp),
              (6, 2, 404.0, '2018-06-14 20:32:34.104873'::timestamp),
              (7, 3,  25.2, '2018-06-14 20:32:52.0759'::timestamp)
           ) v(a,b,c,d)
  )
  
select *
  from (
         select t.*
              , row_number() over(partition by u_id, last_update::date order by last_update desc) as rn
              , dense_rank() over(partition by u_id order by last_update::date desc) as dnsrnk
           from bal t
       ) v
 where dnsrnk <= 2
   and rn = 1
 order by id

...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / PostgreSQL выборка из таблицы за текущий день и предыдущие дни
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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