SQL-删除仅更改一列的行
我在SQL中有一个很大的表,其中一个有效的_from date列应该在其他列每次更改时更新。但是,由于某些原因,有许多行中的“生效日期”发生了更改,但没有其他值发生更改。例如:SQL-删除仅更改一列的行,sql,select,Sql,Select,我在SQL中有一个很大的表,其中一个有效的_from date列应该在其他列每次更改时更新。但是,由于某些原因,有许多行中的“生效日期”发生了更改,但没有其他值发生更改。例如: CODE NAME EFFECTIVE_FROM CCWA Oak 1999 CCWA Willow 2001 CCWA Willow 2004 SELECT code, name, max(EFFECTIVE_FROM) FROM tablename GROUP BY co
CODE NAME EFFECTIVE_FROM
CCWA Oak 1999
CCWA Willow 2001
CCWA Willow 2004
SELECT code, name, max(EFFECTIVE_FROM)
FROM tablename
GROUP BY code, name
如何删除生效日期的更改未提供任何信息的行。e、 g.上表第三行
SELECT code, name, max(EFFECTIVE_FROM)
FROM tablename
GROUP BY code, name
这些表非常大,所以我更喜欢使用SELECT语句,而不是DELETE或ALTER语句,因为它们看起来很慢
SELECT code, name, max(EFFECTIVE_FROM)
FROM tablename
GROUP BY code, name
非常感谢任何帮助 我相信您正在寻找:
SELECT Code, Name, MAX(EFFECTIVE_FROM)
FROM myTable
GROUP BY Code, Name
SELECT code, name, max(EFFECTIVE_FROM)
FROM tablename
GROUP BY code, name
试试这个:
SELECT code, name, max(EFFECTIVE_FROM)
FROM tablename
GROUP BY code, name
由于是较晚的日期不添加任何信息,因此需要选择最小日期值
SELECT code, name, max(EFFECTIVE_FROM)
FROM tablename
GROUP BY code, name
SELECT Code, Name, MIN(EFFECTIVE_FROM)
FROM CodeTable
GROUP BY Code, Name
您想使用滞后。没有重复项的结果集:
SELECT code, name, max(EFFECTIVE_FROM)
FROM tablename
GROUP BY code, name
select t.*
from (select t.*,
lag(code) over (order by effective_from) as prev_code,
lag(name) over (order by effective_from) as prev_name
from t
) t
where (prev_code <> code or prev_code is null) and
(prev_name <> name or prev_name is null);
这假设代码和名称从不为NULL。这很容易融入逻辑,但会使where子句有点复杂。你的问题并没有明确你想要达到的真正结果:如果你想从表中永久删除元素,你需要使用delete,如果你的目标只是过滤掉你描述的重复项,您可以使用SELECT,元素将保留在表中
SELECT code, name, max(EFFECTIVE_FROM)
FROM tablename
GROUP BY code, name
<> P>你考虑使用删除的事实使我认为除了日期之外,这种重复是不可取的。
在这种情况下,您也可以考虑添加一个触发器,当信息字段以外的所有字段都不被更改时,可以阻止插入,这样只有有趣的数据更改才会生成新的行。p>
SELECT code, name, max(EFFECTIVE_FROM)
FROM tablename
GROUP BY code, name
然后,您可以执行一次操作,删除所有重复的元素,这些元素不反映夜间要执行的任何数据更改操作,或者当系统负载较低或无人使用时(如果您键入的表非常大)
SELECT code, name, max(EFFECTIVE_FROM)
FROM tablename
GROUP BY code, name
这种解决方案改变了此表的性质,事实上,在没有实际数据更改的情况下,您将丢失更新的历史信息。只有当这些信息对你的目标不是必需的时候,才考虑这个解决方案。我想我是想得太多了!
SELECT code, name, max(EFFECTIVE_FROM)
FROM tablename
GROUP BY code, name