如何在sql server中从当前日期时间到过去7天获取最近7天的数据

时间:2014-12-22 09:07:12

标签: sql sql-server sql-server-2008-r2 pentaho pentaho-cde

您好我正在使用pentaho将表格数据从sql server加载到mysql 加载数据时我需要从sql server一个表到mysql只获得最近7天的数据 在sql server createddate列中,数据类型类似于datetime AND 在mysql created_on column中,数据类型是timestamp

这里我使用了以下查询,但我只获得了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

9 个答案:

答案 0 :(得分:23)

尝试类似:

 SELECT id, NewsHeadline as news_headline, NewsText as news_text, state CreatedDate as created_on
 FROM News 
 WHERE CreatedDate >= DATEADD(day,-7, GETDATE())

答案 1 :(得分:6)

我认为过去七天你每天都没有数据。没有数据的天数显然不会出现。

尝试此操作并验证您在过去7天内每天都有数据

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

编辑 - 从您的评论中复制

  

我有十九进制-1行数据,第18行-2行,第17行-3行,第16行-3   行,第15行-3行,第12行-2行,第11行-4行,第9行-1行,第8行

您没有所有日期的数据。这是你的问题,而不是查询。如果您今天 - 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)

答案 2 :(得分:5)

select id,    
NewsHeadline as news_headline,    
NewsText as news_text,    
state,    
CreatedDate as created_on    
from News    
WHERE CreatedDate>=DATEADD(DAY,-7,GETDATE())

答案 3 :(得分:1)

希望这会有所帮助,

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

答案 4 :(得分:1)

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

我希望它将对您有帮助

答案 5 :(得分:1)

这对我有用!

SELECT * FROM `users` where `created_at` BETWEEN CURDATE()-7 AND CURDATE()

答案 6 :(得分:1)

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

struct OtherView: View {
    @State var list: [String] = ["Phil Swanson", "Karen Gibbons", "Grant Kilman", "Wanda Green"]
    @State var selectKeeper = Set<String>()

    var body: some View {
        NavigationView {
            List(list, id: \.self, selection: $selectKeeper) { item in
                if self.selectKeeper.contains(item) {
                    Text(item).bold()
                } else {
                    Text(item)
                }
            }.navigationBarItems(trailing: HStack {
                if self.selectKeeper.count != 0 {
                    Button("Send") {
                        print("Sending selected... \(self.selectKeeper)")
                    }
                }
                EditButton()
            })
        }
    }
}

答案 7 :(得分:1)

要提取最近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

答案 8 :(得分:0)

如果您想使用Pentaho DI进行操作,可以使用“修改后的JavaScript ”步骤并编写以下功能:

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

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

enter image description here

希望有所帮助:)