Ответ 1
Попробуйте что-то вроде:
SELECT id, NewsHeadline as news_headline, NewsText as news_text, state CreatedDate as created_on
FROM News
WHERE CreatedDate >= DATEADD(day,-7, GETDATE())
Привет, я загружаю таблицу. Данные из sql-сервера в mysql, используя pentaho при загрузке данных мне нужно получить только последние 7 дней данных из SQL-сервера. Таблица для mysql В sql server createddate column тип данных подобен datetime И В mysql created_on столбец datatype является меткой времени
Здесь я использовал ниже запрос, но я получаю только данные за 5 дней
Пожалуйста, помогите мне в этом выпуске
select id,
NewsHeadline as news_headline,
NewsText as news_text,
state,
CreatedDate as created_on
from News
WHERE CreatedDate BETWEEN GETDATE()-7 AND GETDATE()
order by createddate DESC
Попробуйте что-то вроде:
SELECT id, NewsHeadline as news_headline, NewsText as news_text, state CreatedDate as created_on
FROM News
WHERE CreatedDate >= DATEADD(day,-7, GETDATE())
select id,
NewsHeadline as news_headline,
NewsText as news_text,
state,
CreatedDate as created_on
from News
WHERE CreatedDate>=DATEADD(DAY,-7,GETDATE())
Я не думаю, что у вас есть данные за каждый день за последние семь дней. Дни, для которых не существует данных, явно не будут отображаться.
Попробуйте это и подтвердите, что у вас есть данные за каждый день за последние 7 дней.
SELECT DISTINCT CreatedDate
FROM News
WHERE CreatedDate >= DATEADD(day,-7, GETDATE())
ORDER BY CreatedDate
EDIT - скопировано из вашего комментария
У меня есть данные за 19-й строкой, 18-й -2 строки, 17-й -3 строки, 16-й -3 строки, 15-3 рядов, 12-е -2 строки, 11-я -4 строки, 9-я -1 строка, 8-я -1 строка
У вас нет данных за все дни. Это ваша проблема, а не запрос. Если вы выполните запрос сегодня - 22-й - вы получите данные только для 19-го, 18-го, 17-го, 16-го и 15-го. У вас нет данных для 20-го, 21-го и 22-го.
EDIT. Чтобы получить данные за последние 7 дней, где доступны данные, вы можете попробовать
select id,
NewsHeadline as news_headline,
NewsText as news_text,
state,
CreatedDate as created_on
from News
WHERE CreatedDate IN (SELECT DISTINCT TOP 7 CreatedDate from News
order by createddate DESC)
Надеюсь, это поможет,
select id,
NewsHeadline as news_headline,
NewsText as news_text,
state,
CreatedDate as created_on
from News
WHERE CreatedDate >= cast(dateadd(day, -7, GETDATE()) as date)
and CreatedDate < cast(GETDATE()+1 as date) order by CreatedDate desc
Если вы хотите сделать это с помощью Pentaho DI, вы можете использовать " Модифицированный JavaScript" и написать следующую функцию:
dateAdd(d1, "d", -7); // d1 is the current date and "d" is the date identifier
Проверьте изображение ниже: [Предполагая, что текущая дата: 22 декабря 2014 года]
Надеюсь, это поможет:)
Функции DATEADD и GETDATE могут не работать в базе данных MySQL. поэтому, если вы работаете с базой данных MySQL, вам может помочь следующая команда.
select id, NewsHeadline as news_headline,
NewsText as news_text,
state, CreatedDate as created_on
from News
WHERE CreatedDate>= DATE_ADD(CURDATE(), INTERVAL -3 DAY);
Я надеюсь, что это поможет вам