我已就此网站进行了一些研究,但我发现解决方案并非我正在寻找的解决方案或实施方案与我尝试做的事情没有关系。或者,简单地说,我似乎无法弄明白。这是我的问题。
我们有一个月度查询,我们将运行,我们将发送给第三方医生,他们的学位,专业和诊所。我已经建立了查询。但最近他们想让我们从前几个月的数据中导出新的结果,而不是整个结果列表。所以,我想我会创建一个工具,我开始只是导入前几个月的数据。然后接受我一直在使用的查询,将其放入coldfusion页面,运行它,它会显示我们在上个月的当月运行的新记录。当我每月运行新数据的报告时,它会将数据保存在数据库中,其中包含r_month和r_year列,这仅表示报告月/年。因此,为了最初填充数据库,我刚刚导入了Octobers数据,因此我可以拥有r_month / year的基础" 10"和" 2014"分别。有674条记录。然后创建了我的页面,并有一个运行相同查询的按钮,保存这些结果,r_month和r_year保存为" 11"和" 2014"分别。当我这样做时,我有682条记录。因此,对于11月份,有8个"不同的"或上个月(10月)的新记录。我的问题是,运行从10月(2014年10月)获取数据并将其与11月数据(11/2014)进行比较的查询的最佳方法是什么,并且只给我新的8条记录,从11月开始是新的。
对不起,这很长,但想给你们一个细节,以便你尽可能多地获取信息。我真的没有我能提供的代码示例,因为显然我之前尝试的方式(使用循环等)只是不起作用。尝试循环上个月查询和当前月份查询,试图找到差异,但这不起作用。我再次尝试使用我在这里找到的类似样品,但它们要么不是我想要的,要么我无法弄清楚它们。基本上在流程结束时,需要一个按钮,只将新记录(在本例中为8)导出到Excel工作表中,我们只需通过电子邮件发送即可。
非常感谢任何帮助。
答案 0 :(得分:1)
解决方案1 - 由于您使用的是SQL Server,因此您可以在查询中轻松完成此操作。您已经记录了以前的数据,因此您可能在日志表中有“旧”医生的密钥。尝试这样的事情:
<cfquery name="getNewPHys" datasource="#dsn#">
SELECT *
FROM sourceTable
WHERE physID NOT IN
(SELECT physID FROM logtable
WHERE daterange between #somerange# AND #someotherrange#)
</cfquery>
你必须添加你自己的值和变量,但你明白了。
注意:这是伪代码。你可以在课程中使用cfqueryparam来表示你的任何变量。
解决方案2 另一种方法是使用dateadded或lastUPdated表。每次更新行时,都会使用当前日期/时间更新 lastupdated 列。然后选择最近的记录是选择在您的范围内更新的任何记录。 Taht是Leigh在评论中提出的建议。
我会添加另一条评论。您似乎试图解决此问题而不更改数据表中的任何内容。那不行。您需要更多地考虑您的架构。例如,解决方案2将涉及添加额外的列,您甚至可以添加MSSQL 触发器,每当记录更新时自动更新该字段。那不行吗?
我仍然认为我们遗漏了一些东西。您是否每次都覆盖您的数据?或者生成重复记录 - 本月674,下个月682重复?如果是这样,那就是你需要纠正的。其他任何事情都将成为解决方案的一个障碍,在未来会产生更多问题。
答案 1 :(得分:0)
第1步 - 在表格中添加computed column。确保您持久保存数据,以便对其进行索引。计算应该产生2014年1月的'201401'等值。让我们称之为YearMonth
然后您的代码和查询如下所示:
ControlYearMonth = "201410"; // October 2014
<cfquery>
select field1, field2, etc
from yourtable
where YearMonth = <cfqueryparam value="#ControlYearMonth#">
except
select field1, field2, etc
from yourtable
where YearMonth < <cfqueryparam value="#ControlYearMonth#">
<cfquery>