Salut, je charge des données de serveur SQL vers mysql à l'aide de pentaho Lors du chargement de données, je n'ai besoin que de récupérer les données des 7 derniers jours à partir du serveur SQL. Dans mysql created_on, le type de données de la colonne est timestamp
Ici, j'ai utilisé la requête ci-dessous, mais je n'ai que 5 jours de données.
S'il vous plaît aidez-moi dans ce numéro
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
Essayez quelque chose comme:
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())
Je ne pense pas que vous ayez des données pour chaque jour des sept derniers jours. Les jours pour lesquels aucune donnée n'existe, ne seront évidemment pas affichés.
Essayez ceci et validez que vous avez des données pour CHAQUE jour pour les 7 derniers jours.
SELECT DISTINCT CreatedDate
FROM News
WHERE CreatedDate >= DATEADD(day,-7, GETDATE())
ORDER BY CreatedDate
EDIT - Copié de votre commentaire
j'ai dec 19 -1 lignes de données, 18e -2 lignes, 17e -3 lignes, 16e -3 lignes, 15ème -3 lignes, 12ème -2 lignes, 11ème -4 lignes, 9ème -1 ligne, 8ème -1 ligne
Vous n'avez pas de données pour tous les jours. C'est votre problème et non la requête. Si vous exécutez la requête aujourd'hui, le 22, vous n'obtiendrez les données que pour les 19, 18, 17, 16 et 15. Vous n'avez aucune donnée pour le 20, le 21 et le 22.
EDIT - Pour obtenir les données des 7 derniers jours, lorsque les données sont disponibles, vous pouvez essayer
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)
J'espère que ça va aider,
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
Les fonctions DATEADD et GETDATE peuvent ne pas fonctionner dans la base de données MySQL. Ainsi, si vous travaillez avec une base de données MySQL, la commande suivante peut vous aider.
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);
J'espère que cela vous aidera
Si vous voulez le faire avec Pentaho DI, vous pouvez utiliser " JavaScript modifié " Étape et écrire la fonction ci-dessous:
dateAdd(d1, "d", -7); // d1 is the current date and "d" is the date identifier
Vérifiez l'image ci-dessous: [En supposant que la date actuelle est le: 22 décembre 2014]
J'espère que ça aide :)