powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Отбор данных
10 сообщений из 10, страница 1 из 1
Отбор данных
    #39774622
elimpion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, подскажите как можно реализовать запрос, нужно отобрать id тех данных где в attrid есть 13000412 а следом за им идет 13000411. По моему примеры это будет id 1,4,5
...
Рейтинг: 0 / 0
Отбор данных
    #39774628
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LAG/LEAD

SY.
...
Рейтинг: 0 / 0
Отбор данных
    #39774637
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
elimpionПо моему примеры это будет id 1,4,53
...
Рейтинг: 0 / 0
Отбор данных
    #39774672
elimpion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,
функцию посмотрел, на как там прописать условия, что первая строка должна быть 13000412 а предыдущая 13000411?
...
Рейтинг: 0 / 0
Отбор данных
    #39774674
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
elimpion,

Нужно поле сортировки

....
stax
...
Рейтинг: 0 / 0
Отбор данных
    #39774679
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
elimpionкак там прописать условия, что первая строка должна быть 13000412 а предыдущая 13000411?
Для этого следует определить отношение порядка (какая строка какой "первая" и какая - "предыдущая").
В excel Вы используете для этого номер строки, в rdbms такого понятия нет.
...
Рейтинг: 0 / 0
Отбор данных
    #39774691
elimpion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,
С порядком я определился
...
Рейтинг: 0 / 0
Отбор данных
    #39774745
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты неправильно сформулировал задачу. Если порядок определяется attrid, то тебе нужны id где attrid = 13000411,13000412.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
WITH T AS (
           SELECT  C.*,
                   COUNT(DISTINCT ATTRID) OVER() CNT
             FROM  CARDATTRS C
             WHERE OBJECTID = '3092802'
               AND ATTRCODE = 'STATEID'
               AND ATTRID IN (13000411,13000412)
          )
SELECT  *
  FROM  T
  WHERE CNT = 2
/



SY.
...
Рейтинг: 0 / 0
Отбор данных
    #39774747
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если ты хочешь все записи для таких id:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
WITH T AS (
           SELECT  ID,
                   SUM(
                       DISTINCT CASE ATTRID
                                  WHEN 13000411 THEN 1
                                  WHEN 13000412 THEN 2
                                END
                      ) OVER() FLAG
             FROM  CARDATTRS
             WHERE OBJECTID = '3092802'
               AND ATTRCODE = 'STATEID'
          )
SELECT  ID
  FROM  T
  WHERE FLAG = 3
/



SY.
...
Рейтинг: 0 / 0
Отбор данных
    #39774750
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а если нужны только сами id, то банальный group by:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT  ID
  FROM  CARDATTRS
  WHERE OBJECTID = '3092802'
    AND ATTRCODE = 'STATEID'
    AND ATTRID IN (13000411,13000412)
  GROUP BY ID
  HAVING COUNT(DISTINCT ATTRID) = 2
/



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


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