如何编辑此SQL Server查询以使其更准确?

L

我将从SQL Server 2005的内置功能中安排它,使其每30-35分钟执行一次。以下是查询:

UPDATE PREMIUM_SERVICE2 SET ndays = ndays - 1 
WHERE strAccountID NOT IN
    (SELECT strAccountID FROM CURRENTUSER) 
    AND ndays > 0 AND (PremStart < DATEADD(DAY,-1,GETDATE()))
DELETE FROM PREMIUM_SERVICE2 where nDays = 0

但是有1个问题。一旦他们从网站上获得了溢价,它就会像添加它一样10/11/2013 11:50:40 PM,这意味着在上面执行这两个查询时每30分钟将始终-1启用nDays而不是大约1天。因此,我想将其添加为:

UPDATE PREMIUM_SERVICE2 SET ndays = ndays - 1, PremStart = GetDate() 
WHERE strAccountID NOT IN
    (SELECT strAccountID FROM CURRENTUSER) 
AND ndays > 0 AND (PremStart < DATEADD(DAY,-1,GETDATE()))
DELETE FROM PREMIUM_SERVICE2 where nDays = 0

因此,当更新时,它也会更新,PremStart但是这会使情况变得更糟,因为现在它可能会错过30分钟,而当它们有30天的保费时..它可能会错误地至少将它们添加1天,这使得自从计划的作业将每30分钟执行一次。因此,如何编辑第一个查询以确保它更准确,并且只有在真正通过时才实际减去1天?我希望你们能理解我的意思。我使用SQL Server 2005

安德烈·M

与保费期有关的所有属性是什么?只是开始日期/时间和剩余天数?每天计数器滴答一下就足够了,但是每30-35分钟一次?在某个时候,您将开始需要知道nDays今天是否已经减去了–仅凭这两列就无法确定,这就是问题所在。

如果必须要知道剩下的天数是从表的专用列中读取该值,而不是每次都基于固定的初始值来计算该值,那么您需要再分配一列,以便可以得到这种或那种形式的终点-这是我能想象,你可以跟踪的数量的唯一途径运行查询时留下多于一天一次。

例如,第三列可以是保费期的初始长度。这样,您可以使用以下语句进行更新ndays

UPDATE PREMIUM_SERVICE2
SET ndays = TotalDays - DATEDIFF(MINUTE, PremStart, GETDATE()) / 1440
WHERE strAccountID NOT IN
    (SELECT strAccountID FROM CURRENTUSER) 
    AND ndays > 0
;

TotalDays第三列的名称在哪里如您所见,ndays它不是简单地递减-它是在每次运行时计算的。

实际上,这是您的应用程序(或需要该ndays值的任何操作)可以执行的操作,而不是提取预先计算的值,即,您可以将该表达式放入用于请求剩余天数的查询中,从而摆脱掉ndays自然地,您还需要修改DELETE语句,以ndays使用与上面相同的表达式或与其类似的表达式替换条件,以检查应删除哪些行。

我并不是说ndays绝对不需要。拥有它可能会有价值,并且在您的特定情况下分配它可能很有意义,但是随后您确实需要记住某种形式的终点。

还有一个潜在的问题要解决,这主要是由的新计算方法引起的ndays如果运行脚本的作业由于某种原因而延迟(停了一段时间,然后又恢复了),则理论上可能会导致负值ndays,因此使用诸如condition这样的条件的DELETE语句ndays = 0肯定会错过它们。因此,我只是将条件更改为ndays <=0

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

加入非常相似但不准确的列 ID(并编辑它们以使其准确)

来自分类Dev

如何将以前的数据添加到此SQL查询中(也可以使其变得更简单)?

来自分类Dev

如何改善选择查询以使其更快?

来自分类Dev

如何使此查询递归Sql Server?

来自分类Dev

如何提高此SQL Server查询的性能?

来自分类Dev

如何编写此 SQL Server 查询?

来自分类Dev

如何使此SQL查询更短?

来自分类Dev

如何计算此SQL查询?

来自分类Dev

如何使此SQL查询更快

来自分类Dev

如何改善此SQL查询?

来自分类Dev

如何整理此 SQL 查询?

来自分类Dev

如何简化此 SQL 查询

来自分类Dev

如何执行此 SQL 查询?

来自分类Dev

如何改进此 SQL 查询?

来自分类Dev

如何重写此查询以使其工作,mysql left join multiple from

来自分类Dev

如何在SQL Server中编写此sql查询?

来自分类Dev

SQL Server:此SQL语句如何工作

来自分类Dev

如何优化JPQ JOIN查询以使其运行更快

来自分类Dev

我将如何查询键以使其部分匹配?

来自分类Dev

如何在sql-server中编写此查询?

来自分类Dev

如何使用多个“ CASE”改进此SQL Server查询?

来自分类Dev

如何在SQL Server 2008中编写此查询

来自分类Dev

如何在SQL Server 2008中编写此查询?

来自分类Dev

如何在 SQL Server 中查询此输出?

来自分类Dev

如何在 sql server 中解决此查询?

来自分类Dev

如何使用CriteriaBuilder设置此SQL查询?

来自分类Dev

如何优化此SQL查询并缩短?

来自分类Dev

如何使此查询在SQL中运行更快?

来自分类Dev

EF如何转换此查询SQL?