如何在选择查询中增加 sql 计数器

Posted

技术标签:

【中文标题】如何在选择查询中增加 sql 计数器【英文标题】:how to increment sql counter in select query 【发布时间】:2016-08-29 08:00:22 【问题描述】:

我想创建一个列“计数器”,每当我们运行 select 语句时,它都会增加计数。

假设我今天运行选择查询。我的输出将如下所示。

name    | employeeid | counter

raj        123             1
steve      124             1
brad       125             1

明天当我运行查询时,旧记录的计数器应该会增加

name    | employeeid | counter

raj        123             2
steve      124             2
brad       125             2
pitt       126             1

在我运行计数器的第 3 天,对于上述旧记录,计数器应该会增加。

name    | employeeid | counter

raj        123             3
steve      124             3
brad       125             3
pitt       126             2
camie      127             1

从由 doj desc 排序的 mytable 中选择 name、employeeid、count(name) over (partition by name) 计数器

【问题讨论】:

A SELECT 不更新表数据。 每个名字的每一天都有单独的记录吗? 如果一天内运行两次 select 语句会怎样? 是的,每天(大部分)都会添加每条记录,有时会在特定日期添加两条或更多条记录。有时不会添加任何记录。 select 语句每天只运行一次@Pirate 【参考方案1】:

如果您假设查询每天执行一次,那么您的计数器基本上是从创建记录到今天 + 1 之间的天数。假设创建日期存储在 creation_date 列中。你可能需要这样的东西:

select name, employeeid, 
       trunc(sysdate - creation_date) + 1 counter 
from your_table

【讨论】:

【参考方案2】:

为此,您必须使用触发器,但问题是您不能在 select 语句上使用触发器。

但它可以通过使用处理程序来实现 PL/SQL 过程——它将处理我们想要触发的选择事件,然后我们可以定义与我们的处理程序关联的细粒度审计策略。

参考:Click here

希望它会有所帮助。

【讨论】:

以上是关于如何在选择查询中增加 sql 计数器的主要内容,如果未能解决你的问题,请参考以下文章

如何将任何给定的 SQL/HQL 选择查询动态转换为等效计数查询?

sql如何选择行=值的多行计数

如何提高 SQL Server 查询的性能以选择具有值的行不在子查询中的一次计数

由于计数,db2/sql 查询不允许从连接中选择静态值

SQL 查询 - 选择不同的类别并计数

如何从oracle sql中的选择计数中对rownum使用case语句?