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

А теперь не словами, а в виде таблицы из пары десятков строк.
И чего с этих данных должно получиться желаемым запросом, тоже в виде таблицы.
...
Рейтинг: 0 / 0
SQL запрос к таблице
    #40126144
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный Вася
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
SQL запрос к таблице
    #40126212
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
SQL запрос к таблице
    #40126216
fawnfate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правильный Вася,

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

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

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

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

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

https://ibb.co/W0Mdx5R
https://ibb.co/S322n5b
...
Рейтинг: 0 / 0
SQL запрос к таблице
    #40126493
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
SQL запрос к таблице
    #40126582
fawnfate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

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

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

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

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

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

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

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


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