MySQL ОБНОВЛЕНИЕ с SELECT GREATEST (дата) - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть этот код:

UPDATE fizmod_csat_szolgaj
SET
    erv_vege = TO_DATE('2020-JAN.-01', 'YYYY-MON.-DD')
WHERE
    fizmod_csat_szolgaj_id IN (
        SELECT
            fmcsatszolg.fizmod_csat_szolgaj_id
        FROM
            szolg_ajanlat_tipus   szolgajtip
            INNER JOIN fizmod_csat_szolgaj   fmcsatszolg ON ( fmcsatszolg.szolgaltatasi_ajanlat_tipus_id = szolgajtip.szolgaltatasi_ajanlat_tipus_id )
            INNER JOIN apex_changeset ac ON ( ac.CHANGESET_ID = szolgajtip.CHANGESET_ID AND ac.status_es = 'CHANGESET_STATUS#ELES' )
        WHERE
                greatest((
                SELECT
                    MAX(erv.erv_vege)
                FROM
                    ervenyesseg erv
                WHERE
                    erv.szolgaltatasi_ajanlat_tipus_id = szolgajtip.szolgaltatasi_ajanlat_tipus_id
            ),(
                SELECT
                    MAX(erv.ertekesith_vege_d)
                FROM
                    ervenyesseg erv
                WHERE
                    erv.szolgaltatasi_ajanlat_tipus_id = szolgajtip.szolgaltatasi_ajanlat_tipus_id
            )) < '2020-JAN.  -01'
    )
    AND engedelyezo_jel = '1';

на pastebin: https://pastebin.com/xpVJyYC9

Я хотел бы изменить инструкцию SET, чтобы обновить erv_vege с помощью дата в ГДЕ Итак,

greatest((
                SELECT
                    MAX(erv.erv_vege)
                FROM
                    ervenyesseg erv
                WHERE
                    erv.szolgaltatasi_ajanlat_tipus_id = szolgajtip.szolgaltatasi_ajanlat_tipus_id
            ),(
                SELECT
                    MAX(erv.ertekesith_vege_d)
                FROM
                    ervenyesseg erv
                WHERE
                    erv.szolgaltatasi_ajanlat_tipus_id = szolgajtip.szolgaltatasi_ajanlat_tipus_id
            ))

вернет дату (например, 2019.JAN.02), и я хочу обновить erv_vege с этой датой.

SET erv_vege = TO_DATE( the date from greatest(...), 'YYYY-MON.-DD')

Я пробовал с

SET erv_vege = SELECT to_date(GREATEST( 
    ( SELECT MAX(erv.erv_vege) FROM ERVENYESSEG erv WHERE erv.szolgaltatasi_ajanlat_tipus_id = szolgajtip.szolgaltatasi_ajanlat_tipus_id ), 
    ( SELECT MAX(erv.ERTEKESITH_VEGE_D) FROM ERVENYESSEG erv WHERE erv.szolgaltatasi_ajanlat_tipus_id = szolgajtip.szolgaltatasi_ajanlat_tipus_id )  
), 'YYYY-MON.-DD')
FROM ERVENYESSEG erv, SZOLG_AJANLAT_TIPUS szolgajtip ...

но это не сработало. Как мне подойти к этой проблеме?

1 Ответ

0 голосов
/ 08 апреля 2020

Это должно работать для SET:

SET erv_vege = (SELECT (SELECT GREATEST(MAX(erv.erv_vege), MAX(erv.ertekesith_vege_d))
                        FROM ervenyesseg erv
                        WHERE erv.szolgaltatasi_ajanlat_tipus_id = sat.szolgaltatasi_ajanlat_tipus_id
                       )
                FROM szolg_ajanlat_tipus sat JOIN
                     fizmod_csat_szolgaj fcs
                     ON fcs.szolgaltatasi_ajanlat_tipus_id = sat.szolgaltatasi_ajanlat_tipus_id JOIN
                     apex_changeset ac
                     ON ac.CHANGESET_ID = sat.CHANGESET_ID AND
                        ac.status_es = 'CHANGESET_STATUS#ELES'
               )

Я изменил запрос, чтобы упростить логи c и ввести более короткие псевдонимы таблиц.

...