powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как из выборки with сделать дополнительную выборку
7 сообщений из 7, страница 1 из 1
Как из выборки with сделать дополнительную выборку
    #40076530
*Ann*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Очень нужна помощь.
Есть такой запрос:
with x_cnt as (
select eah.orponid as gid
, count(*) over(partition by replace(eaa.orponid||' '||COALESCE(lower(eah.housenum), '')||COALESCE(lower(eah.buildnum),'')||COALESCE(lower(eah.strucnum), ''),' ',' ')) as cnt
from public.ent_as_house eah
left join public.ent_as_addrobj eaa on eah.parent_id = eaa.id
where 1=1
and eah.livestatus = 1
and eah.mrf_id = 354858661
and eah.parent_id is not null
)
Этот запрос выдает идентификаторы eah.orponid адресов, которые являются дублями. Как из этих адресов выбрать только те пары или тройки дублей, в которых хотя бы у одного адреса дата создания (eah.create_date) больше какой-то даты, например, 01.06.2021?

То есть должны остаться такие адреса:
ID Адрес Дата создания
1 Волокамск, ул. Свободы д. 1 01-05-2019
2 Волокамск, ул. Свободы стр. 1 01-06-2021
3 Ипатово, ул. Доватора д. 68а 05-02-2015
4 Ипатово, ул. Доватора д. 68а 02-06-2021
...
Рейтинг: 0 / 0
Как из выборки with сделать дополнительную выборку
    #40076592
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*Ann*


with x_cnt as (
select eah.orponid as gid
, count(*) over(partition by replace(eaa.orponid||' '||COALESCE(lower(eah.housenum), '')||COALESCE(lower(eah.buildnum),'')||COALESCE(lower(eah.strucnum), ''),' ',' ')) as cnt
from public.ent_as_house eah
left join public.ent_as_addrobj eaa on eah.parent_id = eaa.id
where 1=1
and eah.livestatus = 1
and eah.mrf_id = 354858661
and eah.parent_id is not null
)
Этот запрос выдает идентификаторы eah.orponid адресов, которые являются дублями. Как из этих адресов выбрать только те пары или тройки дублей, в которых хотя бы у одного адреса дата создания (eah.create_date) больше какой-то даты, например, 01.06.2021?


1. Прочитайте правила оформления постов. Никто не обязан вам тут помогать, правильно оформленный пост - это элементарное уважение к окружающим. Которые это оценят.


2. Как-то так (не отлаживал)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
with x_cnt as (
    select
      eah.orponid as gid,
      eah.create_date,
      count(*) over(partition by replace(eaa.orponid||' '||COALESCE(lower(eah.housenum), '')
||COALESCE(lower(eah.buildnum),'')||COALESCE(lower(eah.strucnum), ''),'  ',' ')) as cnt,
      DENSE_RANK() over(partition by replace(eaa.orponid||' '||COALESCE(lower(eah.housenum), '')
||COALESCE(lower(eah.buildnum),'')||COALESCE(lower(eah.strucnum), ''),'  ',' ')) as rank
    from public.ent_as_house eah
      left join public.ent_as_addrobj eaa on eah.parent_id = eaa.id
    where eah.livestatus = 1
       and eah.mrf_id = 354858661 
       and eah.parent_id is not null )

select *
from x_cnt as src
  cross apply (select top (1) 1
                    from x_cnt src2
                    where src2.rank = src.rank
                      and src2.create_date >= @SearchDate) f
where src.cnt > 1




3. Какой смысл несла конструкция "where 1=1"?
...
Рейтинг: 0 / 0
Как из выборки with сделать дополнительную выборку
    #40076677
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КесарьКакой смысл несла конструкция "where 1=1""динамический" запрос с параметрами,
когда нет параметров - остается 1=1, чтобы не убирать WHERE из "конструктора запроса"
...
Рейтинг: 0 / 0
Как из выборки with сделать дополнительную выборку
    #40076684
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov
КесарьКакой смысл несла конструкция "where 1=1"
"динамический" запрос с параметрами,
когда нет параметров - остается 1=1, чтобы не убирать WHERE из "конструктора запроса"

Ничего себе! АИ оказывается уже близок, как никогда!


Что это за конструктор, что умеет собирать такие запросы?!
...
Рейтинг: 0 / 0
Как из выборки with сделать дополнительную выборку
    #40076775
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кесарь,

Скорее всего веб-форма, где пользователь выбирает фильтры из combobox/checkbox/textbox, далее генерируется sql. Это нормальная практика с ипользованием 1=1
...
Рейтинг: 0 / 0
Как из выборки with сделать дополнительную выборку
    #40076817
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLAD
Кесарь,

Скорее всего веб-форма, где пользователь выбирает фильтры из combobox/checkbox/textbox, далее генерируется sql. Это нормальная практика с ипользованием 1=1


Ну это понятно, просто я не мог предположить, что у нас такие уже все умные, что научились делать генераторы с cte и оконными функциями.

Обычные генераторы генерят такую лютую кондовую хрень, что на неё без слёз взглянуть нельзя. И ВСЁ НЕПРЕМЕННО ЗАГЛАВНЫМИ БУКВАМИ.


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


P.S. Кстати что-то она не отвечает. Нехорошо, люди стараются, помогают.
...
Рейтинг: 0 / 0
Как из выборки with сделать дополнительную выборку
    #40077051
mnbvcx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"3. Какой смысл несла конструкция "where 1=1"?"
Кесарь, обычное дело писать такое, если запустить запрос и нужно закомментировать следующую строку в WHERE, нопремер

Код: sql
1.
2.
3.
WHERE 1 = 1 
--and x.rn <= (case when z.modelid is null then @n else 1 end)
and coalesce(x.OnlyT0,0) = 0


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


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