我有一个表,其中包含包含行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。
唯一记录表示当前记录与最后一个记录不同。
答案 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
答案 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)
我是否遗漏了要点,或者您是否可以不添加每次更新时都会增加的额外列?查询一个试图从全表扫描中计算出来的值会更简单吗?