#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 не является недавней.