Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL设置过期标志_Sql_Amazon Redshift - Fatal编程技术网

SQL设置过期标志

SQL设置过期标志,sql,amazon-redshift,Sql,Amazon Redshift,我试图在SQL中标记已进入“过期”状态的记录。我使用当前到期日的简单日期计算来计算“过期”状态,一旦到期日已过,它将触发过期标志。我的问题在于,一旦此记录过期一次,我的客户希望它继续显示为过期。(他们可以更改前端的到期日,将来设置时会使记录不再过期。)是否可以设置某种固定标志,以便一旦到期日>当前日期,记录在工作流中第一次显示为过期,直到关闭 过期标志示例: Select current_date as report_date ,issue_id ,issue_due_d

我试图在SQL中标记已进入“过期”状态的记录。我使用当前到期日的简单日期计算来计算“过期”状态,一旦到期日已过,它将触发过期标志。我的问题在于,一旦此记录过期一次,我的客户希望它继续显示为过期。(他们可以更改前端的到期日,将来设置时会使记录不再过期。)是否可以设置某种固定标志,以便一旦到期日>当前日期,记录在工作流中第一次显示为过期,直到关闭

过期标志示例:

Select
    current_date as report_date
    ,issue_id
    ,issue_due_date
    ,case when report_date > issue_due_date then 'Current'
    when report_date < issue_due_date then 'Past Due'
From Table
选择
当前日期作为报告日期
,问题编号
,发行到期日
,当报告日期>发行到期日期然后为“当前”时的情况
当报告日期<发布日期>到期日期时,则为“过期”
从桌子上
但是,在整个问题工作流中,用户可以将到期日期设置为将来的日期,这将使上述查询变为“当前”。我想找出一种方法,一旦一个问题进入“过期”,不管记录向前发生了什么,它总是保持为“过期”


SQL:Redshift

通常在这样的表中,您会有一个结束日期或完成日期。如果是这样的话,你可以用它来确定它是否在完成之前过期了。在SQL Server中,类似于以下内容的操作将起作用:

CASE WHEN COALESCE(Closed_date,GETDATE())>DUE_DATE then 'Yes'
ELSE 'No'
END as Past_due_flag
希望这有帮助

编辑:评论中提到的情况并不理想。您可以通过保存票据的数据或过期状态的快照来实现这一点。如果数据是实时更新的,那么就没有什么可以做的了,因为如果一张票证今天过期了,而今天的到期日期发生了变化,除非你有前一天数据的快照,否则你将无法知道。我建议使用更改日志,跟踪表中的所有这些更改。希望这有意义。

修改后的答案:

由于您使用的是红移,因此没有理想的方法来实现这一点。您需要某种cron/agent作业或触发器(红移不支持)。如果对计划作业使用某种类型的其他服务,则可以运行以下查询将PastDue(位类型)列更新为0或1

UPDATE table_name
SET PastDue = 1
WHERE DueDate < CurrentDate AND PastDue=0
更新表\u名称
设置PastDue=1
其中DueDate

现在,一旦设置了PastDue标志,即使他们更改了记录上的到期日期,PastDue标志仍将保持为true(1)。

您使用的数据库是?还有一些数据作为例子来解释情况——这将是一个很好的开端,帮助我理解问题并尝试帮助你。但好的,那就是我…嗨-使用redshift这是一个查询、计算列还是其他什么?您能提供任何样本数据或代码吗?@ashley,如果您愿意发布您的帖子并添加更多细节,我们将更容易为您提供帮助。看看这个,然后添加创建所需的详细信息。示例数据和所需结果会有所帮助。谢谢!这正是我用来计算记录当前是否过期的方法。问题是,用户可以更改到期日,并将其进一步推到未来,这将更改过期标志。我试图弄清楚,一旦过期,标志='Yes',那么它总是'过期',直到问题状态='Closed'(很抱歉,如果这不是超级清楚…),我指的是语言。这种类型的东西仍然需要某种类型的cron/agent。我已经根据最新的评论更新了我的答案,上面说她正在使用红移。修改后的答案就清楚了。应该有一个“竖起大拇指”的表情符号。但你明白我的意思。