Нужна помощь с запросами MySQL.

upravlenie

Client
Регистрация
31.12.2020
Сообщения
232
Благодарностей
16
Баллы
18
Есть таблица. Работаю с ней таким образом:

Сначала ищу запись которая старше 14 дней через UPDATE (для работы в многопотоке). Если записей нет, ищу запись которая старше 7 дней. Если записей нет, ищу запись которая старше 1 дня.
Затем через SELECT получаю необходимы данные из столбцов.

SQL:
UPDATE Моя_таблица 
SET Метка="уникальная метка"
WHERE `Дата_создания`="текущая дата" - INTERVAL 20160 MINUTE
AND Метка=""
ORDER BY Количество_использований ASC
LIMIT 1
SQL:
SELECT Столбец_1, Столбец_2, Столбец_3
FROM Моя_таблица
WHERE Метка = "уникальная метка"
Получается от 2х до 4х обращений к таблице.

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

upravlenie

Client
Регистрация
31.12.2020
Сообщения
232
Благодарностей
16
Баллы
18
Готов оплатить консультацию) в личку плиз)
 

Deisler

Client
Регистрация
26.10.2019
Сообщения
486
Благодарностей
190
Баллы
43
Есть таблица. Работаю с ней таким образом:

Сначала ищу запись которая старше 14 дней через UPDATE (для работы в многопотоке). Если записей нет, ищу запись которая старше 7 дней. Если записей нет, ищу запись которая старше 1 дня.
Затем через SELECT получаю необходимы данные из столбцов.

SQL:
UPDATE Моя_таблица
SET Метка="уникальная метка"
WHERE `Дата_создания`="текущая дата" - INTERVAL 20160 MINUTE
AND Метка=""
ORDER BY Количество_использований ASC
LIMIT 1
SQL:
SELECT Столбец_1, Столбец_2, Столбец_3
FROM Моя_таблица
WHERE Метка = "уникальная метка"
Получается от 2х до 4х обращений к таблице.

Собственно вопрос. Нужна помощь со вложенным запросом, который смог бы уложить в себе эти условия) Либо через хранимую процедуру)
Заранее благодарен за вашу помощь)
1680517822252.png1680517865740.png


SQL:
SELECT
    CASE
        WHEN NOW() - INTERVAL 14 DAY > MAX(created_at) THEN 'older_than_14_days'
        WHEN NOW() - INTERVAL 7 DAY > MAX(created_at) THEN 'older_than_7_days'
        ELSE 'older_than_1_day'
    END AS `age_range`,
    column1,
    column2,
    column3
FROM my_table
WHERE
    CASE
        WHEN NOW() - INTERVAL 14 DAY > MAX(created_at) THEN created_at <= NOW() - INTERVAL 14 DAY
        WHEN NOW() - INTERVAL 7 DAY > MAX(created_at) THEN created_at <= NOW() - INTERVAL 7 DAY
        ELSE created_at <= NOW() - INTERVAL 1 DAY
    END
LIMIT 1;

Сам я этот код не пробовал
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 523
Благодарностей
1 321
Баллы
113
Посмотреть вложение 105499Посмотреть вложение 105500


SQL:
SELECT
    CASE
        WHEN NOW() - INTERVAL 14 DAY > MAX(created_at) THEN 'older_than_14_days'
        WHEN NOW() - INTERVAL 7 DAY > MAX(created_at) THEN 'older_than_7_days'
        ELSE 'older_than_1_day'
    END AS `age_range`,
    column1,
    column2,
    column3
FROM my_table
WHERE
    CASE
        WHEN NOW() - INTERVAL 14 DAY > MAX(created_at) THEN created_at <= NOW() - INTERVAL 14 DAY
        WHEN NOW() - INTERVAL 7 DAY > MAX(created_at) THEN created_at <= NOW() - INTERVAL 7 DAY
        ELSE created_at <= NOW() - INTERVAL 1 DAY
    END
LIMIT 1;

Сам я этот код не пробовал
Сразу бы написали что chatgpt...
 
  • Спасибо
Реакции: _HEDELKA_

Deisler

Client
Регистрация
26.10.2019
Сообщения
486
Благодарностей
190
Баллы
43

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)