Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / SQL запрос к таблице / 12 сообщений из 12, страница 1 из 1
12.01.2022, 20:43
    #40126119
fawnfate
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос к таблице
Здравствуйте, помогите с запросом, будьте так добры
У меня есть таблица, в которой есть три столбца
Первая колонка - год
Вторая колонка - порядковый номер
Третья колонка - общее количество
Для наглядности приведу пример:
Если в первой строке в первом столбце указан 2021 год, то во втором столбце обязательно должна быть сначала 1, в третьей столбце может указываться любая цифра ( так как это общее количество ), к примеру возьмём цифру 3
Во второй строке в первом столбце идёт все тот же 2021 год, во втором столбце уже идёт цифра два ( так как порядковый номер ) и в третьем столбце снова должна быть тройка ( так как общее количество )
В третьей строке в первом столбце опять 2021 год, во втором столбце уже должна стоять тройка, в третьем столбце так же остаётся тройка
Это пример правильно заполнения таблицы
Как мне с помощью запроса, найти те записи, в которых эти условия не соблюдаются
В таблице около 13 тысячи записей, мне нужно вывести столбцы, где указан год, которые не соответствуют данным условиям
...
Рейтинг: 0 / 0
12.01.2022, 20:55
    #40126129
Правильный Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос к таблице
fawnfate,

А теперь не словами, а в виде таблицы из пары десятков строк.
И чего с этих данных должно получиться желаемым запросом, тоже в виде таблицы.
...
Рейтинг: 0 / 0
12.01.2022, 21:52
    #40126144
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос к таблице
Правильный Вася
fawnfate,

А теперь не словами, а в виде таблицы из пары десятков строк.
И чего с этих данных должно получиться желаемым запросом, тоже в виде таблицы.


Вот-вот.

Сделайте что-то вроде:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
WITH tab AS (
SELECT 2021 AS year, 1 AS npp, 3 AS total FROM dual
UNION ALL
SELECT 2021, 2, 3  FROM dual
UNION ALL
SELECT 2021, 3, 3  FROM dual
-- Здесь ещё строчек вашего примера добавьте, чтобы пример стал более показательным
)
--
SELECT * FROM tab;

     YEAR        NPP      TOTAL
---------- ---------- ----------
      2021          1          3
      2021          2          3
      2021          3          3


А потом в виден таблицы покажите, что из этих данных должно получиться.
Для оформления таблицы будет удобен тэг CSV
...
Рейтинг: 0 / 0
13.01.2022, 09:59
    #40126212
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос к таблице
fawnfate,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
WITH t AS (
SELECT 2021 AS year, 1 AS npp, 3 AS total FROM dual UNION ALL
SELECT 2021, 2, 3  FROM dual UNION ALL
SELECT 2021, 3, 3  FROM dual UNION ALL
SELECT 2021, 3, 3  FROM dual UNION ALL
--
SELECT 2020, 1, 4  FROM dual UNION ALL
SELECT 2020, 2, 4  FROM dual UNION ALL
SELECT 2020, 3, 4  FROM dual UNION ALL
--
SELECT 2019, 2, 5  FROM dual UNION ALL
SELECT 2019, 3, 5  FROM dual UNION ALL
SELECT 2019, 4, 5  FROM dual UNION ALL
--
SELECT 2018, 1, 5  FROM dual UNION ALL
SELECT 2018, 2, 5  FROM dual UNION ALL
SELECT 2018, 3, 6  FROM dual 
)
, tt as (
  select t.*
   ,lag(npp,1,0) over (partition by year order by npp) l
   ,first_value(decode(npp,1,total)) over (partition by year order by npp) f
  from t
)
select * from tt where npp<>l+1 or LNNVL(f=total) 
order by 1,2

SQL> /

      YEAR        NPP      TOTAL          L          F
---------- ---------- ---------- ---------- ----------
      2018          3          6          2          5
      2019          2          5          0
      2019          3          5          2
      2019          4          5          3
      2021          3          3          3          3

SQL>



.....
stax
...
Рейтинг: 0 / 0
13.01.2022, 10:09
    #40126216
fawnfate
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос к таблице
Правильный Вася,

god - год
pn - порядковый номер
ok - общее количество

первый фотка - то, что должно быть в таблице и как это выглядит правильно
втора фотка - неверные данные, которые находятся в таблице
как мне узнать года всех неверных строк таблицы

https://ibb.co/W0Mdx5R
https://ibb.co/S322n5b
...
Рейтинг: 0 / 0
14.01.2022, 09:01
    #40126478
fawnfate
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос к таблице
SQL*Plus,

god - год
pn - порядковый номер
ok - общее количество

первый фотка - то, что должно быть в таблице и как это выглядит правильно
втора фотка - неверные данные, которые находятся в таблице
как мне узнать года всех неверных строк таблицы

https://ibb.co/W0Mdx5R
https://ibb.co/S322n5b
...
Рейтинг: 0 / 0
14.01.2022, 09:46
    #40126493
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос к таблице
fawnfate

в третьей столбце может указываться любая цифра ( так как это общее количество )


любое, или к-во строк для 'год'?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
SQL> ed
Wrote file afiedt.buf

  1  WITH t AS (
  2  SELECT 2021 AS year, 1 AS npp, 3 AS total FROM dual UNION ALL
  3  SELECT 2021, 2, 3  FROM dual UNION ALL
  4  SELECT 2021, 3, 3  FROM dual UNION ALL
  5  SELECT 2021, 3, 3  FROM dual UNION ALL
  6  --
  7  SELECT 2020, 1, 3  FROM dual UNION ALL
  8  SELECT 2020, 2, 3  FROM dual UNION ALL
  9  SELECT 2020, 3, 3  FROM dual UNION ALL
 10  --
 11  SELECT 2019, 2, 3  FROM dual UNION ALL
 12  SELECT 2019, 3, 3  FROM dual UNION ALL
 13  SELECT 2019, 4, 3  FROM dual UNION ALL
 14  --
 15  SELECT 2018, 1, 3  FROM dual UNION ALL
 16  SELECT 2018, 2, 5  FROM dual UNION ALL
 17  SELECT 2018, 3, 6  FROM dual
 18  )
 19  , tt as (
 20    select t.*
 21    ,lag(npp,1,0) over (partition by year order by npp) l
 22  --,first_value(decode(npp,1,total)) over (partition by year order by npp) f
 23    ,count(*) over (partition by year) c
 24    from t
 25  )
 26  select * from tt where npp<>l+1 or total<>c
 27* order by 1,2
SQL> /

      YEAR        NPP      TOTAL          L          C
---------- ---------- ---------- ---------- ----------
      2018          2          5          1          3
      2018          3          6          2          3
      2019          2          3          0          3
      2021          1          3          0          4
      2021          2          3          1          4
      2021          3          3          2          4
      2021          3          3          3          4

7 rows selected.

SQL>



.....
stax
...
Рейтинг: 0 / 0
14.01.2022, 13:45
    #40126582
fawnfate
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос к таблице
Stax,

любое, но это любое число или цифра будет равняться количеству строк 'год'
...
Рейтинг: 0 / 0
14.01.2022, 13:55
    #40126588
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос к таблице
fawnfate
Stax,

любое, но это любое число или цифра будет равняться количеству строк 'год'

Приведите точное ожидаемое вами решение задачи для приведенных исходных данных.
...
Рейтинг: 0 / 0
14.01.2022, 14:06
    #40126596
fawnfate
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос к таблице
SQL*Plus,

god - год
pn - порядковый номер
ok - общее количество

первый фотка - то, что должно быть в таблице и как это выглядит правильно
вторая фотка - неверные данные, которые находятся в таблице
как мне узнать года всех неверных строк таблицы

https://ibb.co/W0Mdx5R
https://ibb.co/S322n5b

ожидаемое решение такое, чтобы выполнялся запрос результатом которого были данные из второго скриншота ( https://ibb.co/S322n5b )

первое условие у меня есть:

select god,pn,ok from table
where pn>ok

но оно не полное, остаются еще неверные записи, который этот запрос не выводит
...
Рейтинг: 0 / 0
14.01.2022, 14:32
    #40126609
fawnfate
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос к таблице
SQL*Plus,

god - год
pn - порядковый номер
ok - общее количество
https://ibb.co/W0Mdx5R
https://ibb.co/S322n5b

еще есть некоторые условия:
первое, о котором я писал выше - ok<pn (если порядковый номер больше, чем общее количество, то данные в таблице неверные, что и нужно нам найти)
второе, не может быть несколько одинаковых pn в одном god
третье, не может быть разных ok в одном god
четвертое, ok должно быть равно строкам одного и того же god
...
Рейтинг: 0 / 0
14.01.2022, 15:07
    #40126627
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос к таблице
fawnfate,

чем не устраивает 22420842 ?

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


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