如何计算在SQL中修改记录的次数

时间:2019-02-23 05:20:55

标签: sql

我有一个表,其中包含包含行ID作为主键以及其他列(如Mon,Tue,Wed ...

)的表

只要有保存操作,就会在DB中创建一行。

我想弄清楚数据库中数据被修改了多少次。

例如考虑表

ID   Mon  Tue Wed     
1     Y    Y   Y    
2     Y    N   Y    
3     N    Y   Y    
4     N    Y   Y    

我想知道记录已被修改了多少次。

查看上表,由于3条唯一记录,结果应该为3。

唯一记录表示当前记录与最后一个记录不同。

4 个答案:

答案 0 :(得分:0)

您可以尝试使用子查询

select count(*)
from
(
   select distinct Mon , Tue, Wed from your_table
) x

答案 1 :(得分:0)

如果您的dbms支持,另一种方法可以使用dense_rank

select sum(total)
 (
 select case when
 dense_rank() over(partition by Mon,Tue,Wed order by id )=1 then 1 else 0 end as total
 from cte
 ) t

demo

答案 2 :(得分:0)

使用lag()

select count(*)
from (select t.*,
             lag(mon) over (order by id) as prev_mon,
             lag(tue) over (order by id) as prev_tue,
             lag(wed) over (order by id) as prev_wed
      from t
     ) t
where prev_mon is null or
      prev_mon <> mon or
      prev_tue <> tue or
      prev_wed <> wed;

请注意,这将处理值“返回”到先前值的情况。这样的数据:

ID   Mon  Tue Wed     
1     Y    Y   Y    
2     Y    N   Y    
3     N    Y   Y    
4     N    Y   Y    
5     Y    Y   Y    

计数为4,而不是3。如果需要3 –表中不同条目的数量,则只需执行以下操作:

select count(*)
from (select distinct mon, tue, wed
      from t
     ) t;

或者,某些数据库支持:

select count(distinct mon, tue, wed)
from t;

答案 3 :(得分:0)

我是否遗漏了要点,或者您是否可以不添加每次更新时都会增加的额外列?查询一个试图从全表扫描中计算出来的值会更简单吗?