创建每天检查新数据的查询

时间:2015-06-03 21:00:47

标签: sql sql-server sql-server-2008

我想知道我是否可以在SQL Server 2008中自动执行查询的问题上获得帮助。我的目标是使用" CUSTOMER_ID&#从数据库中的多个表中提取相关的客户数据34;链接WHERE子句中的所有表。此外,我自动执行此查询,使其每天运行,从前一天输入的信息,并将其导出到excel文件,在那里它被逮捕到已经收集的信息。

现在这是我到目前为止:

SELECT DISTINCT 
[table1].CUSTOMER_ID AS "Customer ID",
[table2].CUSTOMER_ROOM AS "Room", 
[table3].LAST_NAME AS "Last", 
[table3].FIRST_NAME AS "First", 
[table3].SEX AS "Sex", 
[table3].AGE AS "Age", 
[table4].CHECK_IN_TIME AS "CheckIn", 
[table4].CHECK_OUT_TIME AS "Checkout",
[table4].HOTEL_LOCATION AS "Hotel", 
[table4].HOTEL_ID AS "Hotel ID", 
[table5].PLANE_ARRIVAL AS "Plane Arrival", 
[table5].PLANE_DEPART AS "Plane Departure", 
[table6].LOG_CREATE_TIME
FROM 
[table1]
INNER JOIN 
[table2] ON [table2].CUSTOMER_ID =[table1].CUSTOMER_ID
INNER JOIN 
[table3] ON [table3].CUSTOMER_ID =[table1].CUSTOMER_ID
INNER JOIN 
[table4] ON [table4].CUSTOMER_ID =[table1].CUSTOMER_ID
INNER JOIN 
[table5] ON [table5].CUSTOMER_ID =[table1].CUSTOMER_ID
INNER JOIN 
[table6] ON [table6].CUSTOMER_ID =[table1].CUSTOMER_ID
WHERE 
[HOTEL_ID] LIKE '02%' AND 
DATEPART(year, [table6].LOG_CREATE_TIME)=2015 AND
DATEPART(month[table6].LOG_CREATE_TIME) between 04 and 05 AND
[table4].HOTEL_LOCATION= '003'

上面的语句提取了我需要的信息,但它在某些情况下会返回重复的信息,我想在正确的方向上轻推一下,我应该如何在最后编辑DATEPART(LOG_CREATE_TIME)部分,以便它只是寻找前一天发布的新条目。截至目前,我显然只是为了测试我的查询而整整几个月。

至于自动化,我计划使用SQL Server 2008的导出向导将其指向一个Excel文件,然后告诉SQL Server代理每晚都运行SSIS包但是发出我的问题。我现在看到的是这种方法会覆盖excel文件中包含的先前信息。有没有办法理解文件中的新信息?

1 个答案:

答案 0 :(得分:0)

要回答您的DATEPART问题,请尝试以下操作:

AND [table6].LOG_CREATE_TIME between convert(date, getdate() -1) and convert(date, getdate())

只需删除您的月份和年份DATEPART语句即可。这将从昨天的午夜到今天的午夜从LOG_CREATE_TIME返回每条记录。这应该解决您的重复数据问题,假设一些事情:

  1. 您每天只运行一次脚本,不再运行。
  2. 当记录在该时间插入日志时,您不会在午夜运行脚本。
  3. 输入到table6中的新记录使用类似于LOG_CREATE_TIME的getdate功能,并且插入后该值不会更改。
  4. 您将这些交叉联接更改为其他内容。交叉加入很麻烦,我不认为他们会给你你认为他们的东西。改为使用内部联接。
  5. 您可以考虑使用位字段跟踪已导出的记录,并更改查询以提取尚未导出的所有记录。