42

嗨,我正在使用 pentaho 将表 A 数据从 sql server 加载到 mysql 加载数据时我只需要从 sql server 获取最近 7 天的数据 A table 到 mysql 在 sql server createddate 列数据类型类似于 datetime 并且在 mysql created_on 列数据类型是时间戳

在这里我使用了下面的查询,但我只得到了 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
4

9 回答 9

50

尝试类似:

 SELECT id, NewsHeadline as news_headline, NewsText as news_text, state CreatedDate as created_on
 FROM News 
 WHERE CreatedDate >= DATEADD(day,-7, GETDATE())
于 2014-12-22T09:13:58.903 回答
10
select id,    
NewsHeadline as news_headline,    
NewsText as news_text,    
state,    
CreatedDate as created_on    
from News    
WHERE CreatedDate>=DATEADD(DAY,-7,GETDATE())
于 2014-12-22T09:13:07.577 回答
8

我认为您没有过去 7 天的每一天的数据。没有数据存在的日子显然不会出现。

试试这个并验证您是否有过去 7 天的每一天的数据

SELECT DISTINCT CreatedDate
FROM News 
WHERE CreatedDate >= DATEADD(day,-7, GETDATE())
ORDER BY CreatedDate

编辑 - 从您的评论中复制

我有 dec 19th -1 行数据,18th -2 行,17th -3 行,16th -3 行,15th -3 行,12th -2 行,11th -4 行,9th -1 行,8th -1 行

您没有整天的数据。那是您的问题,而不是查询。如果您今天(22 日)执行查询,您将只能获得 19 日、18 日、17 日、16 日和 15 日的数据。您没有 20 日、21 日和 22 日的数据。

编辑 - 要获取过去 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)
于 2014-12-22T09:23:08.520 回答
6

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);

我希望它会帮助你

于 2018-12-09T03:37:08.240 回答
3

要提取过去 3 天的数据,而不是当前日期:

date(timestamp) >= curdate() - 3
AND date(timestamp) < curdate()

例子:

SELECT *

FROM user_login
WHERE age > 18
AND date(timestamp) >= curdate() - 3
AND date(timestamp) < curdate()

LIMIT 10
于 2020-06-18T08:38:18.760 回答
2

这对我有用!

SELECT * FROM `users` where `created_at` BETWEEN CURDATE()-7 AND CURDATE()
于 2020-04-24T06:20:45.113 回答
1

您可以在 where 子句中使用DATEADD函数,例如

select ...... where Createdate >= DATEADD(day,-7,GETDATE())
于 2020-04-27T04:52:00.460 回答
0

如果你想使用 Pentaho DI 来做,你可以使用“ Modified JavaScript ”步骤并编写以下函数:

dateAdd(d1, "d", -7);  // d1 is the current date and "d" is the date identifier

检查下图:[假设当前日期为:2014 年 12 月 22 日]

在此处输入图像描述

希望能帮助到你 :)

于 2014-12-22T11:12:58.070 回答
0

希望这会有所帮助,

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
于 2018-03-20T06:46:08.257 回答