Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как написать альтернативу функциям LEAD и LAG? / 12 сообщений из 12, страница 1 из 1
14.11.2016, 22:49
    #39347160
yuraavakyan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать альтернативу функциям LEAD и LAG?
такая задача: опустить елементы столбца таблицы на одну позицию.тоесть если было:
1
2
3
4
надо чтобы стало:
null
1
2
3
не используя LEAD LAG и все ето через один запрос
...
Рейтинг: 0 / 0
14.11.2016, 23:44
    #39347175
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать альтернативу функциям LEAD и LAG?
...
Рейтинг: 0 / 0
15.11.2016, 00:22
    #39347179
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать альтернативу функциям LEAD и LAG?
yuraavakyan,

Приведите пример исходных данных и желаемый результат на этих данных (в т.ч. форму этого результата - например, другая таблица или выборка записей).
...
Рейтинг: 0 / 0
15.11.2016, 10:16
    #39347318
yuraavakyan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать альтернативу функциям LEAD и LAG?
miksoft,

Ну я пишу один запрос к табличной переменной с одним столбцом numbers а мне возвращается переменная с тем же столбцом но елементы на 1 штуку опустились вниз,тоесть на месте первого елемента нулл а последний елемент теряется,я же написал пример в вопросе
numbers
1
2
3
4

result:
numbers
null
1
2
3
...
Рейтинг: 0 / 0
15.11.2016, 11:06
    #39347356
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать альтернативу функциям LEAD и LAG?
Код: sql
1.
2.
3.
4.
5.
6.
UPDATE `table`
SET numbers = CASE numbers
              WHEN 1 Then Null
              ELSE numbers - 1
              END
;
...
Рейтинг: 0 / 0
15.11.2016, 15:52
    #39347668
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать альтернативу функциям LEAD и LAG?
yuraavakyanзапрос к табличной переменнойу вас точно MySQL ?
...
Рейтинг: 0 / 0
15.11.2016, 15:54
    #39347671
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать альтернативу функциям LEAD и LAG?
Akina
Код: sql
1.
2.
3.
4.
5.
6.
UPDATE `table`
SET numbers = CASE numbers
              WHEN 1 Then Null
              ELSE numbers - 1
              END
;

Можно чуток короче:
Код: sql
1.
2.
UPDATE `table`
SET numbers = NULLIF(numbers - 1, 0)
...
Рейтинг: 0 / 0
15.11.2016, 20:14
    #39347873
yuraavakyan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать альтернативу функциям LEAD и LAG?
Ребята спасибо конечно всем за предложенные решения,но нужно,чтобы запрос работал при любом вводе,в данном случае если числа не последователжны тоесть совсем разные 12,15,20,31 то резулжтат правильным не будет.
...
Рейтинг: 0 / 0
15.11.2016, 22:26
    #39347944
Cosmagnetto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать альтернативу функциям LEAD и LAG?
Добавить еще одну таблицу как временную
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE TABLE tbl2 AS
(SELECT
  id + 1 AS id,
  DATA
FROM
  tbl1);

UPDATE
  tbl1
  LEFT JOIN tbl2
    ON tbl1.id = tbl2.id SET tbl1.`data` =
    (SELECT
      tbl2.`data`
    FROM
      tbl2
    WHERE tbl1.id = tbl2.id
    LIMIT 1);

DROP TABLE tbl2;
...
Рейтинг: 0 / 0
15.11.2016, 22:28
    #39347945
Cosmagnetto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать альтернативу функциям LEAD и LAG?
наверное лучше не создавать/дропать таблицу, а очищать Truncate и наполнять
...
Рейтинг: 0 / 0
15.11.2016, 22:29
    #39347946
Cosmagnetto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать альтернативу функциям LEAD и LAG?
id предполагается как счетчик в tbl1
...
Рейтинг: 0 / 0
16.11.2016, 06:16
    #39348019
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать альтернативу функциям LEAD и LAG?
yuraavakyanтакая задача: опустить елементы столбца таблицы на одну позицию.тоесть если было:
1
2
3
4
надо чтобы стало:
null
1
2
3
не используя LEAD LAG и все ето через один запрос

как подсказал Акина, посмотрите FAQ,
для вашей задачи подойдет просто пронумеровать записи и сдвинуть на один
по нумерации.

Альтернативно -- если вы знаете mysql переменные -- можете
созхранить предыдушее занчение в переменную и выдавать ее на
следуюшей строчке. Учтите что ORDER BY надо сделать в
обратном порядке.

Для промеров почитайте тотже FAQ и вот этот линк:

http://explainextended.com/2009/03/10/analytic-functions-first_value-last_value-lead-lag/
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как написать альтернативу функциям LEAD и LAG? / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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