ЕСЛИ для использования функции в SQL требуется справка (новая для SQL)

#mysql #sql #if-statement #dateadd #getdate

Вопрос:

Извините, если мой вопрос не ясен, я новичок в этом!

У меня есть данные за 3 года, и я хочу, чтобы столбец 364DaysFlag возвращал 1, если дата в столбце InsertDateTime (который состоит как из даты, так и из времени) находится в пределах последних 364 дней, и возвращал 0, если InsertDateTime старше 364 дней.

Просто чтобы было понятно, Транзакция.табл.Таблица флагов динамична/жива, поэтому каждый день добавляется самый последний день, и именно здесь я отклеиваюсь, чтобы заставить ее работать!

Ниже приведен неверный код (который запускается, но не делает то, что я хочу), который я использовал, и там, где я выделил его жирным шрифтом, он нуждается в обновлении.

 SELECT TransactionDate, TotalCustomers, [1 as 364DaysFlag], InsertDateTime
INTO Transaction.tbl.Flag
FROM Performance.Sales.Total
 

Пожалуйста, не мог бы кто-нибудь посоветовать, как я могу заставить это работать? Нужно ли мне использовать функцию IF или что-то еще? НУЖНА ли мне функция DATEADD и/или GETDATE? Я довольно новичок в SQL и все еще учусь! 🙂

Комментарии:

1. Пожалуйста, предоставьте примерные данные и желаемые результаты. Ваш пример кода не имеет смысла. В MySQL нет INTO оператора (есть INTO предложение, но запрос начинается не так).

2. SELECT TransactionDate, TotalCustomers, InsertDateTime > CURRENT_DATE - INTERVAL 364 DAY AS 364DaysFlag, InsertDateTime ... . Конечно, не ВЫБИРАЙТЕ В — извлеките 364DaysFlag значение столбца обычным способом.

3. @Akina как мне сделать так, чтобы столбец L364D возвращал 1, если дата находится в пределах 364 дней, и 0, если старше 364 дней?

4. Используйте мой фрагмент текста SQL как есть.

Ответ №1:

 SELECT TransactionDate
    , TotalCustomers
    , CASE WHEN /*DateColumn*/ > (GETDATE()-365) THEN 1 ELSE 0 END AS /*ColumnAlias*/
    , InsertDateTime
INTO database.schema.table
FROM Performance.Sales.Total
 

К вашему сведению, постарайтесь не начинать колонку с номера. Кроме того, поскольку это флаг, попробуйте преобразовать его в пару слов, таких как «Недавняя продажа» или что-то подобное, где 1 = да, это недавняя продажа, а 0 не является недавней.