web-dev-qa-db-fra.com

Comment obtenir les données des 7 derniers jours de la date/heure actuelle sur les 7 derniers jours sur un serveur SQL

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
24
SRI

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())
19
SMA
select id,    
NewsHeadline as news_headline,    
NewsText as news_text,    
state,    
CreatedDate as created_on    
from News    
WHERE CreatedDate>=DATEADD(DAY,-7,GETDATE())
5

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)
5
Raj

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
1
Raji

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

1
Mukesh Chauhan

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]

enter image description here

J'espère que ça aide :)

0
Rishu