Имя таблицы указывается дважды, как в качестве цели для обновления, так и в качестве отдельного источника для данных - PullRequest
0 голосов
/ 13 февраля 2019

Я получаю ожидаемую ошибку из своего кода всякий раз, когда я пытаюсь обновить свою таблицу с помощью оператора select, хотя я пытаюсь использовать различные обходные пути без надежд на успех.Любая помощь с моей проблемой будет принята с благодарностью.Спасибо.

UPDATE `table`
SET Slope = CASE

when (SELECT ((SELECT (SELECT IntColumn FROM `table` ORDER by DateColumn desc limit 1) - (SELECT IntColumn FROM `table` ORDER by DateColumn ASC limit 1) FROM DUAL)) as x) > 0 THEN 'Uptrend' 

when (SELECT ((SELECT (SELECT IntColumn FROM `table` ORDER by DateColumn desc limit 1) - (SELECT IntColumn FROM `table` ORDER by DateColumn ASC limit 1) FROM DUAL)) AS x) < 0 THEN 'Downtrend' 

when (SELECT ((SELECT (SELECT IntColumn FROM `table` ORDER by DateColumn desc limit 1) - (SELECT dialcount FROM `table` ORDER by DateColumn ASC limit 1) FROM DUAL)) AS x) = 0 THEN 'Notrend' 

else 'unknown' END

UPDATE `table`
SET Slope = CASE
when ((SELECT (SELECT IntColumn FROM `table` ORDER by DateColumn desc limit 1) - (SELECT IntColumn FROM `table` ORDER by DateColumn ASC limit 1) FROM DUAL)) > 0 THEN 'Uptrend' 
when ((SELECT (SELECT IntColumn FROM `table` ORDER by DateColumn desc limit 1) - (SELECT IntColumn FROM `table` ORDER by DateColumn ASC limit 1) FROM DUAL)) < 0 THEN 'Downtrend' 
when ((SELECT (SELECT IntColumn FROM `table` ORDER by DateColumn desc limit 1) - (SELECT dialcount FROM `table` ORDER by DateColumn ASC limit 1) FROM DUAL)) = 0 THEN 'Notrend' 

else 'unknown' END

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

Я рад, что, наконец, у меня это сработало после многих поисков, попыток и ошибок, и я хотел бы поделиться тем, кто хочет снова использовать этот пример, с методом case.Здесь это выглядит следующим образом:

ОБНОВЛЕНИЕ table SET Slope = CASE когда ((ВЫБРАТЬ (ВЫБРАТЬ (ВЫБРАТЬ intcolumn FROM (ВЫБРАТЬ intcolumn FROM * table ЗАКАЗАТЬ по DateColumn desc limit 1) как lastdc) - (ВЫБРАТЬ)intcolumn FROM (ВЫБРАТЬ intcolumn FROM table ЗАКАЗАТЬ по пределу DateColumn ASC 1) как firstdc) ОТ DUAL) как dff))> 0 ТОГДА «Восходящий тренд», когда ((ВЫБРАТЬ (ВЫБРАТЬ (ВЫБРАТЬ intcolumn FROM) (ВЫБРАТЬ intcolumn FROM table ЗАКАЗАТЬпо DateColumn desc limit 1) как lastdc) - (ВЫБРАТЬ intcolumn FROM (ВЫБРАТЬ intcolumn FROM table ЗАКАЗАТЬ по DateColumn ASC limit 1) как firstdc) FROM DUAL) как dff)) <0 ТОГДА «Нисходящий тренд» когда ((ВЫБРАТЬ (ВЫБРАТЬ(ВЫБЕРИТЕ intcolumn FROM (ВЫБЕРИТЕ intcolumn FROM <code>table ЗАКАЗАТЬ по DateColumn desc limit 1) как lastdc) - (ВЫБЕРИТЕ intcolumn FROM (ВЫБЕРИТЕ intcolumn FROM table ORDER по DateColumn ASC limit 1) как firstdc) FROM DUAL) как dff))= 0 ТОГДА 'Notrend' иначе 'unknown' END

0 голосов
/ 14 февраля 2019

Если вы просто хотите, чтобы запрос вычислял уклон, примерно так должно работать:

SELECT CASE WHEN lastInt > firstInt THEN 'Uptrend'
    WHEN lastInt > firstInt THEN 'Downtrend'
    WHEN lastInt > firstInt THEN 'Notrend'
    END AS `slope`
FROM (
    SELECT (SELECT IntColumn FROM `table` ORDER BY DateColumn DESC LIMIT 1) AS lastInt
        , (SELECT IntColumn FROM `table` ORDER BYDateColumn ASC LIMIT 1) AS firstInt
    ) AS boundInts
;
0 голосов
/ 13 февраля 2019
update table set Slope = case 
when ((SELECT IntColumn FROM `table` ORDER by DateColumn desc limit 1) - (SELECT IntColumn FROM `table` ORDER by DateColumn ASC limit 1))>0 then 'Uptrend'
when ((SELECT IntColumn FROM `table` ORDER by DateColumn desc limit 1) - (SELECT IntColumn FROM `table` ORDER by DateColumn ASC limit 1))<0 then 'Downtrend'
when ((SELECT IntColumn FROM `table` ORDER by DateColumn desc limit 1) - (SELECT IntColumn FROM `table` ORDER by DateColumn ASC limit 1))=0 then 'Notrend'
else 'unknown' end

Надеюсь, это поможет!

...